影片中,志書在天台上要求解一個非常困難的問題:
『哪一個四位數字的215887次方除以16973393的餘數是4076』
轉換成數學問題就是求下面方程式中的
其中是一個正整數。這個問題乍看之下是幾乎不可能完成的。因為根本沒時間去計算上千個數字的215887的次方除以16973393的餘數。這樣的與的對應方式,就是加密方法中的RSA加密/解密法。其中把稱為加密,而從的過程就是解密。解密過程是需要一個解密的次方數字,然後把除以169733393的餘數算出來就好。但如果不知道是什麼,這個解密出來的答案就有超級多種可能,因為每一個都可以解出一個數字來。所以這個就被稱為解密的私鑰。私鑰只有解密的人擁有。為了以下說明方便,我們暫且把解密的人叫做Sofie吧。而則被稱為加密的公鑰,公鑰是可以公開每一個人的。意思就是,每一個人都可以把他想要傳給Sofie的數字,計算它的215887次方除以16973393的餘數傳給Sofie,這樣Sofie就可以透過私鑰把原先的解出來了。而且Sofie還不用怕被別人知道是多少,這也讓這個方法所加密出來的數字,可以公開地在網路上傳播。
如果我們把一個非零的數字,它的1、2、3、…、()次方,除以一個與互質的數字,並把餘數一一列出來。那麼你會發現,這個餘數過幾個之後就會循環出現。舉例來說,2的1次方到15次方除以11的餘數分別為
2、4、8、5、10、9、7、3、6、1、2、4、8、5、10
上面的例子中,2的11次方就除以11的餘數就跟2的1次方一樣,都是2了。之後就開始循環。而這個循環的原因其實可以直覺想到,因為除以11的餘數只有0~10,因為跟是互質的,所以不會出現0。因此,最多也只有10個可能出現的餘數,即使前面10個次方的餘數都不一樣,但第11個,也就是,它除以11的餘數一定會跟前面的重複。而下一個餘數,都會是上一個餘數乘以2之後的餘數(大家可以想想為什麼),所以就開始循環了。這個定理也就是費馬小定理的前身,除以的餘數會是。而它的前一個次方,也就是除以11的餘數就一定會是1。這個定理,我們叫它『費馬小定理』
如果跟互質,且是質數的話,那麼除以的餘數是1
這是一個數論中常用的定理。此外,若我們回去看,,餘以的餘數,它在會循環。也就是它經過個之後會重複。不過真正的循環節會是的因數。就像上面,那麼它10個之後會循環。
以下是,除以11的餘數。雖然從上面的定理知道它10個會循環,但它5個其實就開始循環了。
3、9、5、4、1、3、9、5、4、1、3
舉個例字,假設Sofie把設定成。那麼每一個人要傳訊息給Sofie時,舉例來說,要傳給Sofie。那麼經過RSA加密後的。那麼Sofie要用哪一個數字來解密呢?這時候我們可以選擇。因為會是21,剛好是循環節(長度為10)的倍數再加1。這時候我們計算
其中表示往前一個循環節,因為10個一循環,所以跟除以N的餘數會一樣。再往前一個循環節,就會是也就是2。上面這一個寫法,在數學上會用下面的同餘()符號,來表示跟除以的餘數一樣
最後面的表示除數是11的意思。大家可以把一開始的數字換成,那麼加密後會是除以11的餘數5,也就是。而解密的計算跟剛剛類似,,此時餘以的餘數是。是不是透過次方就把給連結起來了?(Q: 那4傳過去應該是誰呢?)上述的算式可以用數論的同餘概念,就是跟在計算除以11的餘數是一樣的;然以把兩者各7次方。也就是跟除以11的餘數也是一樣的。而。透過循環節及同餘的寫法,計算就會簡單很多。馬上就知道是除以11的餘數是3,如下
而在RSA演算法中,跟的取法就是從循環節來的。如果循環節是,那麼跟的乘積只要比多1即可。所以加密次方跟解密次方之間的關係是
如果跟互質,是一般的數字,那麼除以的餘數是1;其中表示小於且跟互質的正整數個數。
這是費馬小定理一般化的結論。類似於前面的想法,既然跟互質,所以與也是互質的,所以除以最多就是有個不同的餘數。因此,只要超過,一定就會跟前面的重複。就會循環了。舉例來說,除以的餘數,經過個一定會循環。下面就列出了除以的餘數(實際上經過4個就循環了)
2、4、8、1、2、4、8、1
這裡要提到一個特殊情況,如果是兩個質數跟相乘,那麼。這類型兩個質數相乘的,就是RSA演算法所使用的公鑰之一的。如果知道跟,那麼算出是很簡單的。但如果只給,要透過質因數分解找到跟,就是困難的任務。
米珊:『這就像把糖跟鹽混在一起很簡單,但要把它們分開很難』
Shor演算法的原始版本
如果可以找到除以的餘數是,那麼可能有或的因數。其中是跟的最大公因數
這個其實用到了國中學過的平方差公式,因為除以的餘數是,所以會被整除。這時候因式分解出來的兩個數字跟,就很有可能是的因數。而在劇中,志書所用的是出題老師延伸的版本,因為志書發現了其實已經開始循環了。不拘泥於Shor演算法要找到餘數為。志書直接分解了。而且之前志書在計算次方時,由於米珊的提醒之下,採用了平方來進行Fast Power Algorithm。故已經算好了,所以才能夠在時間內把答案算出來。
這是一個計算一個數字高次方的演算法。舉例來說,如果要計算,是需要把乘個次。所以志書說,要計算高次方很難。但是在米珊的提醒下:
米珊:『用平方呢?』
這時給了志書靈感,透過平方快速地把高次方算出來。影片中用了,平方之後就是。這就直接算出了。比乘次來得快多了。而,就是志書在影片中說,『與金鑰差了』。就是除以的餘數,不足。此時把平方,並考慮除以的餘數,就會得到除以的餘數。再平方一次,就是,這時候餘數是;而平方三次,就是,這時候的餘數是。志書在平方的過程中,找到了循環!因此志書可以用,也確定除以之後是。就找到了的質因數分解
如果我們可以找到對應於公鑰的私鑰,那麼只要把除以的餘數找到,那麼就會是了。但是怎麼找到呢?從上面的過程中,我們可以知道它有可能的循環節是,所以我們只需要找到,使得除以的餘數是1就可以。也就是解
這個需要輾轉相除法,運算時的表格如下(如果不知道這個表格的意義,可以請教高中老師):
78 | 16965120(A) | 215887(B) | 1 |
---|---|---|---|
1 | 125934(A-78B) | 89953(79B-A) | 2 |
1 | 35981(2A-157B) | 17991(393B-5A) | |
2 | -1(12A-943B) |
從上述的表格,可以在算出跟的最大公因數時,順便得到。因此我們可以找個一個解,是。所以最後只需要計算的次方。但次方也不是很好算的。這裡還有另一個結合Fast Power Method的神奇快速算法。就是先計算透過把一直平方2次,會得到繼續再平方6次,會得到另外再計算再平方4次,會得到最後利用所以
因此,最後志書算出來的答案就是
x = 9487
其實在影片中的數字,都是有經過精心設計的。當初找這些數字也需要功夫。而且要讓同學們可以透過計算機或(神)手算出來的。如果有興趣研究的同學,可以思考看看是怎麼做的!
是怎麼算出來的?
這裡用到了一個神奇的方式,令,這個問題是要解出的答案。這對應到音階頻率其實是一個等比數列,這個等比數列的公比為(因為經過了12個音階,會高八度;而高八度的音,頻率是兩倍)。但在高中要計算這一個數字,可以透過兩邊取,得到因此,我們可以猜測這個答案。因為答案是四位數,不可能只是660。因此志書猜測會有小數點,所以我們得估更靠近的一個答案。為了更好的近似值,我們需要用到牛頓法求的根:
然後也就是最後的答案。