http://www./blog/archives/202 人有十個手指,用手指的伸屈來計數(shù)非常方便。但一旦對象的數(shù)目超過10個了,手指頭就不夠用了。當然,有人會想到還有腳趾頭。搬弄腳趾頭是不現(xiàn)實的,數(shù)手指頭只需要站著比劃一下就可以了,數(shù)腳趾頭還需要坐下來慢慢研究。一種好的方法是每次數(shù)完了十個指頭后在什么地方做一個標記,比如在地上放一個木棒。人們可以把這根木棒想像成一個“大指頭”,它相當于十個指頭。這樣,我有37個MM就被表示成了地上3個木棒加上我7個手指頭。哈哈,你的MM數(shù)只有兩根木棒加4個手指頭,于是我的MM比你的多。久而久之,人們就只接受0到9這十個數(shù)字了,再大的數(shù)就用幾個數(shù)字合起來表示。這種“滿十進一”的數(shù)字系統(tǒng)就叫做十進位制。 如果人只有八個手指頭又會怎樣呢?那我們現(xiàn)在很可能正在使用八進制,數(shù)學發(fā)展起來后我們最終只接受八個數(shù)字,而大于8的數(shù)字就用更高一級的計量單位表示。代表這八個數(shù)字的很可能是些星際之門里的怪符號,這里為了便于敘述,我們仍然使用阿拉伯數(shù)字的0到7來表示。于是,人類數(shù)數(shù)的方式將變?yōu)椋?,1,2,3,4,5,6,7,10,11,12,13,14,15,16,17,20,...。這里,數(shù)字8被記作10,數(shù)字64則用100代替。在這個數(shù)學世界里,6+5=13,因為6+1得到的數(shù)已經是一位數(shù)中最大的了,再加的話只能“進一位”了?!皾M八進一”將成為數(shù)學運算的基本法則。 如果人有12根手指,12進制將成為更難想像的事。在12進制中,人類會把10和11直接想成是一個“數(shù)字”。研究的進位制大于10時,大于9的數(shù)字我們習慣上用大寫字母ABC來表示。這樣,自然數(shù)序列里將多出兩個符號A和B來,數(shù)數(shù)的方式變?yōu)?..,8,9,A,B,10,11,12,...。 我們自然會想,人類生活中究竟有沒有其它的進位制呢?當然有。比如,時間和角度就是60進位制,60秒=1分。還有更怪的,計算機的儲存容量單位是1024進制的,1MB=1024KB。當然,這也是有原因的。我們在研究幾何時常常需要用到1/2,1/3,1/4或者1/6,我們希望這些分數(shù)在角度進制下恰好都是整數(shù)以便于運算。于是,角度的進位制就變成了60。為什么時間也是60進位制呢?因為時間和角度密切相關,你看看你的手表就知道了(別告訴我你的手表是數(shù)字型的)。為什么鐘和手表又要用圓形表盤的方式來表示時間呢?其實人自古以來計算時間都是用的圓形盤面,因為地球繞太陽旋轉和地球的自轉使得時間具有了周期性。 計算機使用二進制,因為計算機元件只有兩種狀態(tài)(開和關,或者說通電和斷電),因此計算機只認0和1兩個數(shù)字。1024是2的冪,又比較接近1000符合人的習慣,因此把1024當成了計算機容量的進位制。 前段時間有人在OIBH上問,為什么紙幣的面值都是1*10^n、2*10^n、5*10^n呢。有人回答說這樣的貨幣系統(tǒng)可以使得某種貪心方法正確。確實有這個結論,這樣的貨幣系統(tǒng)使得解決“湊錢和找零時最少使用多少張紙幣”這一問題的貪心算法(不斷拿最大面額的紙幣)是正確。但用這一點來解釋我們的問題顯然是可笑的,人們首先考慮的并不是如何方便地使用最少紙幣,而是如何方便地得到總面額。一個只有1元紙幣和7元紙幣的貨幣系統(tǒng)同樣滿足貪心性質,但顯然傻子才會設計出這種別扭的貨幣系統(tǒng)來。因此,我的回答是“紙幣的面值取10的約數(shù),這樣的話湊錢和找零最方便”。但是,有人會問,要是我們使用的進位制不是10怎么辦?換句話說,如果我們使用的是23進位制,除1和本身外沒有其它約數(shù)的話,又該怎樣設置貨幣系統(tǒng)呢。答案非常出人意料,如果我們使用的是23進位制的話,我們很可能根本發(fā)展不出數(shù)學這門學科來。10=1+2+3+4,是前四個正整數(shù)的和;10又是2和5的積;這樣的進位制非常適合數(shù)學的發(fā)展。同樣地,6=1+2+3,6=2*3,因此可能正在使用六進制的昆蟲們很容易發(fā)展出數(shù)學來(六足動物的數(shù)學非常強,不是有人發(fā)現(xiàn)了蜜蜂蜂巢的六邊形樣式設計是最科學的么)。大家看過《計算機中的上帝》(Calculating God)嗎?那里面構造了這樣一種生物:他有23根手指。這種別扭的數(shù)字最多只能讓人聯(lián)想到喬丹和染色體,除此之外沒有任何特性。這給這種生物的數(shù)學發(fā)展帶來不可逾越的困難。而事實上,這種生物恰好又沒有發(fā)展數(shù)學的必要性。他就好像人類一樣,對較小的物體個數(shù)具有直接感知的能力。人類可以直接感知的物體數(shù)量一般不超過6。也就是說,如果你眼前有3個,或者5個東西,你不需要數(shù),看一眼就知道有多少個;但當你眼前出現(xiàn)的物體數(shù)目達到7個或者8個時,你就必須要數(shù)一數(shù)才知道個數(shù)了。而我們所說的生物面對的物體數(shù)目多達46個時仍然可以一眼分辨出多少來,數(shù)目超過46后就統(tǒng)稱為“很多”了。直接感知數(shù)目達到50甚至60多的生物個體就扮演著該種族中的僧侶角色。46這個數(shù)字對于種族的生存已經完全足夠了,他們在組建部落時總會保證部落的個體數(shù)不超過這個數(shù)字。因此,這種生物不需要數(shù)數(shù)的能力,他們也就無須發(fā)展數(shù)學了。他們不知道30加30等于多少,從某種意義上說他們甚至不知道一加一等于幾,因為他們頭腦中根本沒有數(shù)字這個概念。作為一種補償,他們對事物的感知能力相當敏銳。他們甚至直接憑直覺感知到了相對論,因為他們的思維不受演繹邏輯的束縛。 下文將介紹兩套進制轉換的方法,然后介紹這兩套方法在小數(shù)轉換上的應用。更多的進位制相關應用你可以在文后的習題部分中體會到。 在講進位制時,大多數(shù)教材會教大家二進制和十進制如何互換。今天我就偏不這樣講,我要和那些教材講得一樣了我還不如不寫今天這些東西。二進制雖然常用,但比較特殊,很可能會了二進制但仍然不會其它進制;我們今天當一回蜜蜂,看看六進制和十進制怎么互相轉換。學會這個后,任意進制間的轉換你就應該都會了。 說起進位制時往往要回到最根本的一些計數(shù)方法上。這篇日志是我第237篇日志。數(shù)字“237”表示兩個百,加上三個十,加上七個單位一。我們把它們分別叫百位、十位和個位,同一個數(shù)字在不同數(shù)位上表示的實際數(shù)量不同。用一個式子表示上面的意思就是,237=2*100+3*10+7。這就是進位制的實際意義。 現(xiàn)在,假如我是一只勤勞的蜜蜂。我寫237篇日志是肯定不可能的了,因為我的數(shù)學世界里根本沒有7這個數(shù)字。那就說我寫了235篇日志吧。結合前面所說的東西,“十位”上的數(shù)表示有多少個6,“百位”上的數(shù)表示有多少個36(后面提到的十位、百位打引號表明這不是十進制中的“十”和“百”)。于是,六進制下的235就應該等于2*6^2+3*6+5。這個算式你用什么進制算出答案就相當于把六進制中的235轉換為了什么進制。不過你要把這個式子當成別的進制算是不大可能的,算之前你估計得重新背一遍乘法口訣表(注意我為什么不說是“九九”乘法口訣表)。這就是我們?yōu)槭裁匆话阒谎芯渴M制與其它進制互換的原因。我們用熟悉的十進制進行計算,得出2*6^2+3*6+5=72+18+5=95。這是按定義進行進制轉換的方法。六進制的235等于十進制的95,我們記作(235)6=(95)10。那個6和10是下標,應該像H2O的2一樣小小地寫在下面。我就懶得排版了,反正轉貼個幾次就成Plain Text了。 下面的任務是,考慮怎么把(95)10變回(235)6。使用六進制計算13*10+5可以得到235(十位上的9相當于六進制中的13),但我們說過六進制計算很麻煩。下面我們給出一種把十進制轉換為六進制的方法,仔細思考你會發(fā)現(xiàn)這種方法顯然是正確的。我們把所有6的冪從小到大寫出來:1,6,36,216,...。216遠遠超過95了,因此95的六進制不可能是四位數(shù)。95里面有兩個36,因此在最高位上寫個“2”。去掉兩個36,95里只剩23。23里有三個6,數(shù)字3將填寫在第二位上,去掉這三個6最后所剩的5留給最末位。換句話說,我們不斷尋找最大的x使得6^x不超過當前數(shù),當前數(shù)減去6^x并在右起第x+1位上加一。這事實上是前面六進制轉十進制的逆過程。 上面的進制互換方法是一套方法,這是我們所介紹的第一套方法。這套方法的特點是正確性很顯然,但是計算比較復雜,又費馬達又費電。我們需要一個計算更方便的進制轉換方法。下面介紹的就是進制轉換的第二套方案。 再一次回到一個很基礎的問題:在十進制中,為什么乘以10相當于在數(shù)的末尾加一個0?我們同樣會聯(lián)想到位運算:為什么二進制左移一位(末尾加一個0)相當于乘以2?事實上,這個結論普遍存在于所有進位制中:k進制數(shù)的末尾加個0,相當于該數(shù)乘以k。證明方法非常簡單,乘以一個k就相當于進位制展開式的每個指數(shù)都加一,也就相當于所有數(shù)字左移一位。六進制235=2*6^2+3*6+5,乘以6的話式子將變?yōu)?*6^3+3*6^2+5*6,也即2350。利用這個性質,六進制235可以很快轉為十進制:235相當于2后面添0,加上3,再添一個0,再加上5,寫為算式即(2*6+3)*6+5=95。把(2*6+3)*6+5展開來,得到的式子和前面的那種計算方法(2*6^2+3*6+5)一模一樣,但這里的計算方式更簡便一些。如果寫成程序,六進制字符串t轉為十進制數(shù)a只需要一句話就可以完成: for i:=1 to length(t) do a:=a*6+ord(t[i])-48; 使用這種方法將十進制變回六進制是一個徹頭徹尾的逆向操作:當前數(shù)不斷除以6并把余數(shù)作為新的最高位。比如,95除以6等于15余5,余數(shù)5就是個位,15除以6的余數(shù)3作為“十位”,最終的商2是“百位”。這叫做短除法,是最常見的方法,網上隨處可見。 下面說一下進位制中的小數(shù)。前面的東西如果理解了,小數(shù)進制的轉換將順理成章地進行下去。六進制中的0.1相當于十進制的1/6,因為六進制中的0.1、0.2、0.3、0.4、0.5五個數(shù)把區(qū)間0到1均分為了6分。同樣地,(0.05)6=(5/36)10。你會發(fā)現(xiàn),一個“十分位”代表1/6,一個“百分位”代表1/6^2,之前的很多結論仍然成立。六進制小數(shù)12.345就等于1*6^1+2*6^0+3*6^(-1)+4*6^(-2)+5*6^(-3),通過負指數(shù)把進制轉換的整數(shù)部分和小數(shù)部分聯(lián)系在了一起。(12.345)6轉為十進制后居然變成了無限小數(shù),其實這并不奇怪,這只是一個約數(shù)的問題:同樣是三分之一,在我的六進制下正好分干凈(0.2),但在你十進制下就總也分不完,總要剩一點留給下一位(0.333333...)。這里有一些小數(shù)進制轉換的實例??梢钥吹?,一個進制下的有限小數(shù)很可能是另一個進制下的無限循環(huán)小數(shù)。另一個有趣的例子在這里。 既然前面所說的第一套方法中六進制轉十進制對于小數(shù)仍然成立,那么第一套方法的十進制轉六進制也可以直接在小數(shù)上使用。如果你嫌無限小數(shù)很別扭,用分數(shù)進行操作是一種不錯的選擇。具體操作方法和前文敘述一模一樣。針對純小數(shù)的進制轉換,我們把前文的描述換種方法再說一遍:不斷尋找最小的正整數(shù)x使得1/6^x不超過當前數(shù),當前數(shù)減去1/6^x并在小數(shù)點后第x位上加一。我就不再舉例子了,下面主要討論第二套方法在小數(shù)上的應用。 我們曾說過,在k進制末尾加0相當于該數(shù)乘以k??上н@對小數(shù)沒有用,小數(shù)后你加它八百個“0”這個數(shù)仍然不變。其實,“末尾加0”只是這種性質反映在整數(shù)上的一種現(xiàn)象而已,我們還需要看到更本質的東西(還記得高二哲學么)??紤]到小數(shù)的乘k和除k,不難想到這種性質的實質是小數(shù)點的移動,整數(shù)的末尾加0其實是小數(shù)點向右移動一位的結果。顯然小數(shù)也有類似的結論:將k進制小數(shù)的小數(shù)點左移一位,相當于該數(shù)除以k。比如,十進制中3.14除以10就變成了0.314。結論的證明和原來完全相同:除以k后展開式中的指數(shù)全部減一,相當于所有數(shù)右移一位。有了這個結論,我們的方法就出來了。來看六進制12.345如何轉換為十進制。由于這種方法對整數(shù)和小數(shù)的處理方法有一些不同,轉進制時我們通常對整數(shù)部分和小數(shù)部分分別進行操作。先把12轉成十進制的8,然后單獨考慮小數(shù)部分。0.345可以看作是數(shù)字“5”的小數(shù)點左移,加上4后小數(shù)點再次左移,再加上3并最后一次左移小數(shù)點;寫成算式即((5/6+4)/6+3)/6。展開這個式子,實質與前面的方法仍然一樣。小數(shù)部分十進制轉六進制依然是徹頭徹尾的逆向操作:當前數(shù)不斷乘以6并取出整數(shù)部分寫下來。 這里有一個實例供大家參考,這個例子中的進制轉換保證不涉及無限循環(huán)小數(shù)。1/4在十進制和六進制下的表示肯定都是有限小數(shù),因為4的唯一一個因子2同樣也是10和6的因子。先看0.25怎么變成六進制:0.25*6=1.5,取出1,留下0.5;0.5*6=3,沒有小數(shù)部分了,因此(0.25)10就等于(0.13)6。現(xiàn)在我再把它變回去:(3/6+1)/6=(0.5+1)/6=1.5/6=0.25。這不是徹頭徹尾的逆操作嗎? 每年NOIp前總有人問負進位制。事實上,如果你搞清了上面的問題,負進位制將非常好理解。負進位制有一個非常奇特的功能:它可以表示出負數(shù)但不需要用負號。一個負進制數(shù)可能是負數(shù),也可能是正數(shù)。比如,負六進制下的12等于十進制下的-4,而負六進制下的123等于1*(-6)^2+2*(-6)^1+3,即十進制下的27。是正是負取決于位數(shù)的奇偶:若該數(shù)有偶數(shù)位,則該數(shù)為負數(shù);若有奇數(shù)位,則該數(shù)為正數(shù)。原因很簡單,小數(shù)點每右移一位,相當于這個數(shù)乘以-6;從一位數(shù)開始,乘奇數(shù)次后該數(shù)的位數(shù)變成偶數(shù)且值為負,乘偶數(shù)次該數(shù)仍有奇數(shù)位且值仍為正。由于末尾添0的性質(小數(shù)點移位的性質)仍然成立,負六進制與十進制的轉換依然是上面的方法:(123)-6=(1*(-6)+2)*(-6)+3=(27)10。十進制轉負六進制?還是那句話:徹頭徹尾的逆操作。找到最小的非負整數(shù)x使得當前數(shù)減x能被6整除,這個x將作為新的最高位寫到結果中,然后當前數(shù)減去x再除以-6。在這里我不說“余數(shù)”這個詞,因為當除數(shù)為負數(shù)時對余數(shù)的定義很模糊。不再舉例子了,例子都舉煩了,自己把(123)-6=...=(27)10那一行倒過去看就是例子了。 當然,還有更神奇的:-1+i進制可以表示出復數(shù)來,因為-1+i的冪有時含有虛數(shù)有時不含虛數(shù)。運算和轉換依然和上面這些東西一樣,我也就不多說了。 進位制的問題結束了。我們這里是以六進制為例進行的說明,但是不要忘記,最有趣的仍然是二進制。與二進制有關的趣味問題遍地都是。舉個例子,你可以在這里的第三題看到一個二進制的經典應用。 文章最后還是那三句話: Matrix67原創(chuàng) 轉貼請注明出處 請大家?guī)兔π?br> 這次的錯別字可能很多,因為我不是用的紫光,而是用的fcitx,沒辦法使用原來的詞庫了。 講解也可能有漏洞,很多東西是我突然想到,即興寫下的。大家?guī)兔m錯?。?br> 附一:四道進位制練習題及其簡略解答 下面這些題目是在我公布的那個課件里的,是我收集的一些很不錯的具有代表性的題目,講課時已經用過多次了。 1. 證明:Σ(n=1 to ∞)6^( (2-3n-n^2)/2 )是無理數(shù)。 解答:用六進制表示此數(shù),該數(shù)顯然為無理數(shù)。 2. 在哪一種進制中,35與58互質? 解答:由于出現(xiàn)了數(shù)字8,因此進位制至少為9。事實上,35和58在任何不小于9的進位制下都互質,因為輾轉相減不會出現(xiàn)“不夠減”的情況,任何進制下最終都得1。 3. 證明:沒有一種進制使三位數(shù)aaa恰等于a^3。 解答:設此數(shù)為k進制,則ak^2+ak+a=a^3。此方程無整數(shù)解。 4. 在哪一種進制中,792可以被297整除? 解答:這道題目非常有趣。在任何一種進制下,200的四倍都已經超過792,300的兩倍都還不足792。那么,792只可能是297的三倍。設進位制為k,問題轉化為解方程7k^2+9k+2=3*(2k^2+9k+7)。 附二:進位制笑話不完全收集:) 1. What would the value of 190 in hexadecimal BE? 2. If only DEAD people understand hexadecimal, how many people understand hexadecimal? 3. There are only 10 types of people in the world — those who understand binary, and those who don't. 4. There are only 10 types of people in the world — those who understand trinary, those who don't, and those who mistake it for binary. 5. Why do mathematicians think Halloween and Christmas are the same? Because 31 Oct = 25 Dec. |
|
來自: AMI66 > 《mathematica》