580 likes | 900 Views
Integers. §3.4 The Integers and Division §3.5 Representations of Integers §3.6 Integers and Algorithms §3.7 Application of Number Theory. 整數與除法 ( §3.4). 在數學中牽涉到整數及其性質的分支稱為數論 (number theory) 。由本節開始,我們將闡述貫穿電腦科學中所用到之數論的基本概念。 除法與模算術等基本概念 質數與最大公因數的計算 介紹幾個與數論有關的演算法,並探究這些演算法的複雜度
E N D
Integers §3.4 The Integers and Division §3.5 Representations of Integers §3.6 Integers and Algorithms §3.7 Application of Number Theory
整數與除法(§3.4) • 在數學中牽涉到整數及其性質的分支稱為數論(number theory)。由本節開始,我們將闡述貫穿電腦科學中所用到之數論的基本概念。 • 除法與模算術等基本概念 • 質數與最大公因數的計算 • 介紹幾個與數論有關的演算法,並探究這些演算法的複雜度 • 介紹數論的重要結果及其在電腦算術與密碼學上的應用
除法 • 定義:Let aand bbe integers and let a 0. We say that a divides b (a整除b), if there is an integer c such that b = ac. Noted ab. When a divides b, we call a is a factor (因數)of b, and b is a multiple (倍數) of a.
例:判斷是否37與312是否成立。 • 解:37,因為7/3不是整數。但是,312,因為12/3 = 4。 • 例:令n與d為正整數。有多少個小於n的正整數能被d整除? • 解:所有能被d整除的正整數能以dk表示,其中k為一個正整數。因為要找出小於n的正整數,即 0 < dkn,也可表為0 < kn/d。所以一共有n/d個小於n的正整數能被d整除。 不大於n/d的最大整數
定理:令a,b與c為整數。則 (1) 若ab且ac,則a(b + c)。 (2) 若ab,則對所有的整數c,abc。 (3) 若ab且bc,則ac。 • 系理:若a,b與c為整數,使得ab和ac,則amb + nc,其中m與n為整數。 • 除法定理(The Division Algorithm) 令a為整數而d為正整數。存在唯一的整數q和r,使得 a = dq + r,其中0 r < d。
定義:在除法定理的等式中,d稱為除數(divisor)、a稱為被除數(dividend)、q為商數(quotient),而r為餘數(remainder)。下面的符號用來表現商數與餘數:定義:在除法定理的等式中,d稱為除數(divisor)、a稱為被除數(dividend)、q為商數(quotient),而r為餘數(remainder)。下面的符號用來表現商數與餘數: q = adivd,r = amodd。 • 例:當101除以11時,商數與餘數各為何? • 解:我們有101 = 119 + 2。 所以,當101除以11時,商數為9 = 101 div 11。而餘數為2 = 101 mod 11。
例:當11除以3時,商數與餘數各為何? • 解:我們有11 = 3(4) + 1。 所以,當11除以3時,商數為4 = 11 div 3。而餘數為1 = 11 mod 3。 必須注意的是,餘數不能是負數。所以餘數不會是2,雖然11 = 3(3) 2。 因為,r = 2並不滿足0 r < 3。
定義:If a and b are integers, m is a positive integer. If mdivides ab, then we say that a is congruent to b modulo m(在模m時a同餘於b). Denote that。ab (mod m)。 • 定理: If a and b are integers, m is a positive integer. Then ab (mod m) if and only if amod m = bmod m。
例: Is 17 congruent to 5 modulo 6? Is 24 congruent to 5 ? • 解:Since 6 divides 12. Thus 17 is congruent to 5 modulo 6. But 6 does not divide 10, so 24 is not congruent to 5.
定理:Let m be a positive integer. When a is congruent to b mod m if and only if there is an integer k such thata = b + km. • 證明:If ab (mod m), then m(ab). That is k suchthat ab = km. Then a = b + km. On the other hand, if k suchthat ab = km then ab = km. that is, m(ab). Hence ab (mod m).
定理: Let m be a positive integer. If ab (mod m) and cd (mod m), then a + c b + d (mod m) and acbd (mod m)。 • 證明:Since ab (mod m) and cd (mod m), integers s and t, such that b = a + sm and d = c + tm. Thus, b + d (a + sm) + (c + tm) = (a + c) + m(s + t), bd (a + sm)(c + tm) = ac + m(at + cs + stm). Hence, a + c b + d (mod m) and acbd (mod m).
例:因為7 2 (mod 5)與11 1 (mod 5), 根據定理, 18 = 7 + 11 2 + 1 = 3 (mod 5)。 所以, 77 = 711 21 = 2 (mod 5)。
系理:Let a and b be integers and let m be a positive integers. Tehn (a + b) mod m = ((amodm) + (bmod m)) modm, and abmod m = ((amodm)(bmod m)) modm. • 證明:According to definitions, we have a (amodm) (mod m) and b (bmodm) (mod m). By theorem, a + b (amod m)+(bmod m) (mod m) and ab (amod m)(bmod m) (mod m).
同餘的應用 • 散置函數(hashing function) • 在保險公司的中央電腦內都會存有每位客戶的資料。必需如何安排每位客戶資料的記憶位址,才能很方便的被檢索出來?這個問題的解決辦法是,選擇一個合適的散置函數。資料使用鍵值(key)來識別。例如,客戶資料通常以社會安全號碼當成鍵值來做識別。 • 最經常被使用的散置函數為h(k) = kmodm,其中m為可使用之記憶位址個數。 • 散置函數必須很容易計算,檔案才能很快的找到。 • 散置函數應該要映成的,這樣所有記憶位址都有可能使用到。
密碼學 • 同餘最重要的應用之一就是密碼學(cryptology),一個關於祕密信息的研究。這種製造祕密信息的過程稱之為加密(encryption)。 • 密碼的使用,最早可追朔至凱撒大帝(Julius Caesar)。他將信息中每個字的字母向後移動三個,而最後面的三個字母則以最前三個字母來替代。
例:根據凱撒大帝的密碼製作方式,下面的信息“MEET YOU IN THE PARK”會被轉換成什麼? • 解:首先將每個字母改寫成數字如下: 12 4 4 19 24 14 20 8 13 19 7 4 15 0 17 10 利用f(p) = (p + 3) mod 26找出替換的數字, 15 7 7 22 1 17 23 11 16 22 10 7 18 3 20 13 最後,轉換成字母,信息如下: “PHHW BRX LQ WKH SDUN”。
質數 • 定義:一個大於1的正整數p稱為質數(prime),如果p只有1和p兩個正因數。一個大於1的正整數若不為質數,便稱為合成數(composite)。 • 注意:整數n為合成數若且惟若存在整數a, 1 < a < n,使得an。 • 例:整數7為質數,因為其正因數只有1與7。而9是個合成數,因為它能被3整除。
算術基本定理(The fundamental Theorem of Arithmetic) 每個大於1的正整數都能唯一表為一個質數,或是兩個或兩個以上之質數(依非遞減之方式排列)的乘積。 • 100 = 2255 = 2252 641 = 641 999 = 33337 = 3337
定理:若n為合成數,則必有一個n的質因數不大於(n)1/2。定理:若n為合成數,則必有一個n的質因數不大於(n)1/2。 • 證明:若n為合成數,則根據合成數的定義,存在因數a,1 < a < n,使得an。 故,n = ab,其中b為一個大於1的正整數。 若a > (n)1/2且b > (n)1/2,則ab > (n)1/2 (n)1/2 = n,會產生矛盾。所以得證 a (n)1/2且b (n)1/2。
例: 證明101為質數。 • 解:不大於(101)1/2的質數只有2,3,5和7。 因為101都不能被這幾個質數整除,所以101為質數。
定理:質數有無限多個。 • 證明:我們將使用歸謬證法。 假設質數只有有限個,p1, p2, …, pn。 令Q = p1p2 …pn+1。 根據算術基本定理,Q為質數,或是能表成兩個或兩個以上質因數的乘積。然而,由於Qp1p2 …pn = 1 ,沒有任何一個質數pj能整除Q。因為沒有一個質數能整出Q,所以Q本身為質數。如此一來,便與一開始的假設質數矛盾。在這個證明中,我們明確的找出了一個質數不在原來所列之質數序列之中。
近300年來,所能找出的最大質數,都有個特殊的形式,2p 1,其中p為質數。這樣的質數稱為梅遜質數(Mersenne primes),根據法國修道士馬梅遜之姓氏命名。之所以知道質數通常有這樣的形式,是因為有個測試法,稱為盧卡司-里莫測試法(Lucas-Lehmer test),能非常有效的判斷出2p 1的數是否為質數。而且,現今任何測試其他形式的數是否為質數的方法,都沒能如盧卡司-里莫測試法來得有效率。 • 例:下列個數22 1 = 3,23 1 = 7與25 1 = 31都是質數,而211 1 = 2047則不為質數,因為2047 = 2389。
質數定理(The Prime Number Theorem) 當x區近於無窮大時,不大於x之質數的個數和x/lnx的比值會趨近1。(其中lnx為x之自然對數。)
有關質數之猜想與未定論問題 • 哥德巴赫猜想(Goldbach’s Conjecture) 1742年時,哥德巴赫寫了一封信給尤拉,猜測每一個大於5的奇數都能表示成三個質數的和。尤拉回信說,這個猜想其實等價於所有大於2的偶數,都能寫成兩個質數之和。現在,這個猜想被稱為哥德巴赫猜想。我們能檢驗幾個較小的偶數: 4 = 2 + 2,6 = 3 + 3,8 = 3 + 5,10 = 3 + 7, 12 = 5 + 7等等。利用現代電腦,哥德巴赫猜想能檢驗至非常大的數。至2006年初,這個猜想已經被檢驗至21017。
攣生質數猜想(The Twin Prime Conjecture)所謂攣生質數指的是一對相差2的質數,如3與5,5與7,11與13,17與19還有4967和4969。攣生質數猜想聲稱這樣的攣生質數有無限多對。目前所知,最接近的證明為:存在無限多對的p與p + 2,其中p為質數,而p + 2為質數或是兩質數之積。(於1966年,陳潤證出。)截至2006年初,所知最大的攣生質數為16,869,987,339,9752171,960 1這兩個數包含51,779位數。
最大公因數與最小公倍數 • 定義:令a與b為兩個非零的整數。一個滿足da與db的最大的整數d稱為a與b的最大公因數(the greatest common divisor),記為gcd(a, b)。 • 例:何為24與36的最大公因數? • 解:24與36的公因數有1, 2, 3, 4, 6, 和12。所以,最大公因數gcd(24, 36) = 12。 • 例:何為17與22的最大公因數? • 解:除了1,17與22沒有其他的正公因數。所以, gcd(17, 22) = 1。
定義:稱整數a與b是互質的(relatively prime)若它們的最大公因數是1。 • 例:根據上面的範例可知整數17與22互質,因為gcd(17, 22) = 1。
定義:稱整數a1, a2, …, an是兩兩互質的(pairwise relatively prime),如果對任意1 i < jn,都有gcd(ai, aj) = 1。 • 例:判斷10、17和21是否兩兩互質;而10、19和24是否兩兩互質。 • 解:因為gcd(10, 17) = 1,gcd(10, 21) = 1,而且gcd(17, 21) = 1。我們知道10、17和21兩兩互質。 由於gcd(10, 24) = 2 > 1,可以得到10、19和24並不兩兩互質。
例:因為120與500之質因數分解為120 = 2335,500 = 2253。所以,它們的最大公因數為 gcd(120, 500) = 2min(3, 2)3min(1, 0)5min(1, 3) = 223051 = 20。
定義:正整數a與b之最小公倍數(the least common multiple)為能同時被a與b整除之最小正整數,記為lcm(a, b)。 • 例:何為233572與2433的最小公倍數? • 解:根據公式 lcm(233572, 2433) = 2max(3, 4)3max(5, 3)7max(2, 0) = 243572。 • 定理:令a與b為正整數。則ab = gcd(a, b)lcm(a, b)。
整數表示法 • 定理:令b為大於1的整數。若n為正整數,其可唯一表示成下列形態: n = akbk+ ak1bk1+ … + a1b + a0 其中k為非負整數,而ak, ak1,…,a1, a0為小於b的非負整數,且ak 0。
例:二進位表示法(1 0101 1111)2的十進位表示法為何? • 解:由於 (1 0101 1111)2 = 128 + 027 + 126 + 025 + 124 + 123 + 122 + 121 + 120 = 256 + 0 + 64 + 0 + 16 + 8 + 4 + 2 + 1 = 351。 decimal binary expression
例:十六進位表示法(2AE0B)16的十進位表示法為何?例:十六進位表示法(2AE0B)16的十進位表示法為何? • 解:由於 (2AE0B)16 = 2164 + 10163 + 14162 + 0161 + 11 = (175627)10。 hexadecimal
例:找出(12345)10的8進位(octal)表示法。 • 解:首先將12345除以8得到 12345 = 81543 + 1。 接下來,繼續將商數除以8得到 1543 = 8192 + 7, 192 = 824 + 0, 24 = 83 + 0, 3 = 80 + 3。 根據每個除式所得的餘數,我們知道 (12345)10 = (30071)8。
例:找出(177130)10的十六進位表示法。 • 解:首先將177130除以16得到 177130 = 1611070 + 10。 接下來,繼續將商數除以16得到 11070 = 16691 + 14, 691 = 1643 + 3, 43 = 162 + 11, 2 = 160 + 2。 根據每個除式所得的餘數,我們知道 (177130)10 = (2B3EA)16。
例:二進位表示法(1 0101 1111)2的八進位表示法為何?十六進位表示法為何? • 解:由於 (101 011 111)2 = (5 3 7)8。因為,(101)2 = (5)8,(011)2 = (3)8, (111)2 = (7)8。 同理, (1 0101 1111)2 = (1 5 F)16。因為,(1)2 = (1)16,(0101)2 = (5)16, (1111)2 = (F)16。
整數運算之演算法 • 例:將a = (1110)2與b = (1011)2相加。 • 解:a0 + b0 = 0 + 1 = 02 + 1,所以c0 = 0和s0 = 1。 然後,因為 a1 + b1 + c0= 1 + 1 + 0 = 12 + 0,所以c1 = 1和s1 = 0。 繼續計算如下,a2 + b2 + c1= 1 + 0 + 1 = 12 + 0, 所以c2 = 1和s2 = 0。 最後,a3 + b3 + c2= 1 + 1 + 1 = 12 + 1,c3 = 1和s3 = 0。而且,s4 = c3 = 1。 所以,s = a + b = (1 1001)2。
例:使用演算法將兩個n位元的整數相加,需要用到多少次的位元加法次數?例:使用演算法將兩個n位元的整數相加,需要用到多少次的位元加法次數? • 解:兩整數相加,基本上是連續相加一對位元和一個進位位元(若必須進位的話)。所以每一個位置需要相加的次數至多為3次。所以,將兩個n位元的整數相加,需要用到的位元加法次數為O(n)。
例:將a = (110)2與b = (101)2相乘。 • 解:首先注意到 ab020 = (110)2120 = (110)2, ab121 = (110)2021 = (0000)2, 和 ab222 = (110)2122 = (11000)2。 為了得到乘積,利用加法將(110)2,(0000)2和(11000)2加在一起,得到ab = (11110)2。
例:利用乘法演算法將整數a與b相乘時,需要用到多少次的位元加法以及位元位移。 • 解:在演算法中,使用將部份積c0, c1, c2, …和cn1相加來求出a與b的乘積。當bj = 1時,計算部份積cj是將a的二進位表示法位移j個位置;當bj = 0時,不需要做位移,因為 cj = 0。所以,找出n個整數,abj2j,n = 0, 1, 2, …, n1,需要至多 0 + 1 + 2 + … + n 1 個位移。根據先前章節的範例,移動次數為O(n2)。 將整數abj由j = 0加到j = n1,需要將n-位元整數加上一個(n+1)-位元整數,…,加上一個(2n)-位元整數。根據上面的範例知道每次相加需要做O(n)次的位元加法。所以,總共需要的加法次數為O(n2)。
歐基里得演算法 • 引理:令a = bq + r,其中a, b, q與r皆為整數。則gcd(a, b) = gcd(b, r)。 • 歐基里德演算法(Euclidean algorithm;或稱為輾轉相除法) • 不斷地將想要求出最大公因數的兩個整數,利用除法將數字約化,直至其中一個變成零為止。
例:利用歐基里得演算法找出414與662的最大公因數。例:利用歐基里得演算法找出414與662的最大公因數。 • 解:持續利用除法定理: 662 = 4141 + 248 414 = 2481 + 166 248 = 1661 + 82 166 = 822 + 2 82 = 241 所以,gcd(414, 662) = 2,因為2是最後一個非零的餘數。
數論的應用 • 一些有用的結果 • 定理:若a與b為正整數,則存在整數s與t,使得 gcd(a, b) = sa + tb。 • 引理:若a,b和c為正整數,滿足gcd(a, b) = 1和abc,則ac。 • 引理:若p為質數。且pa1a2…an,其中每一個aj都是整數,則存在某個j,使得paj。 • 定理:令m為正整數,而a、b和c為整數。若acbc (mod m),而且gcd(c, m) = 1,則ab (mod m)。
線性同餘 • 定理:If a and m( > 1) are relatively prime integers, then an inverse of a modulo m exists. (若a與m( > 1)為互質整數時,則a在模m下的反元素存在。此外,在模m下此反元素是唯一的。也就是說,存在唯一比m小的正整數a,使得a是a在模m下的反元素,而其他的反元素與a在模m下皆同餘。)
例:Find an inverse of 3 modulo 7. • 解:因為gcd(3, 7) = 1,定理告訴我們3在模7下的反元素一定存在。利用歐基里德演算法找出3與7的最大公因數 7 = 23 + 1。 我們可得 1 = (2)3 + 17。 所以,2為3在模7下的反元素。 (我們必須注意,所有與2模7同餘的整數都是3在模7下的反元素,也就是,5,9,12等等,皆是3在模7下的反元素。)
例:線性同餘3x 4 (mod 7)的解為何? • 解:根據前例,我們知道3在模7下的反元素為2。 將2同乘於等式兩端,得到23x24 (mod 7)。 因為6 1 (mod 7)而且8 6 (mod 7),所以, x8 6 (mod 7)即為線性同餘之解。 我們還想判斷是否每個滿足x 6 (mod 7)的整數x都是解。根據前面章節中的定理,3x 36 = 18 4 (mod 7)。 如此,證明了所有這樣的整數x都是線性同餘方程式 3x 4 (mod 7)的解,即x = 6, 13, 20, …還有1, 8, 15, …都是解。
中國餘式定理 • 例:在第一世紀中,中國是學家孫子問到: 今有物,不知其數。三三數之,賸二;五五數之,賸三;七七數之,賸二。問:問幾何? 這個問題翻譯成數學模型如下:求解下列同餘方程式系統 x 2 (mod 3) x 3 (mod 5) x 2 (mod 7)
中國餘式定理 另m1, m2, …, mn為兩兩互質的整數,而a1, a2, …, an為任意整數。則下列系統 xa1 (mod m1) xa2 (mod m2) xan (mod mn) 在模數m = m1m2 …mn下有唯一解。(也就是說,有一個解x,0 xm,而其他的解都與x在模數m下同餘。)
要證明此定理,不但要找出同餘方程式系統的解,而且指出在模數m下,解是唯一的。首先,我們將找出一個方法來建構出方程式系統的解。要證明此定理,不但要找出同餘方程式系統的解,而且指出在模數m下,解是唯一的。首先,我們將找出一個方法來建構出方程式系統的解。 令Mk = m/mk,因為當ik時,mi與mk沒有公因數,所以 gcd(mk, Mk) = 1。根據定理,能找到Mk在模數mk下的反元素yk使得Mkyk 1 (mod mi),其中k = 1, 2, …, n。 接下來令x = a1M1y1 + a2M2y2 +…+ anMnyn。我們將證明x即為方程式系統的解。因為Mj 0 (mod mk),其中ik。所以,x中所有的項,除了第k項外,其他項在模數mk下皆與0同餘。因此,對所有的k = 1, 2, …, n, xakMkykak (mod mk)。即,x為方程式系統的解。
例:首先,令m = 357 = 105, M1 = m/3 = 35, M2 = m/5 = 21, M3 = m/7 = 15。能找出在模數3下2是M1 = 35的反元素,因為235 = 70 1 (mod 3);在模數5下1是M2 = 21的反元素,因為121 = 21 1 (mod 5);而在模數7下1是M3 = 15的反元素,因為115 = 15 1 (mod 7)。故, x = a1M1y1 + a2M2y2 + a3M3y3 = 2352 + 3211 + 2151 = 233 23 (mod 105)。 我們能說23是為方程式系統最小的整數的解。