Update:整理後的正文可以直接搜尋#乾淨的總結#,但如果直接看總結部分,可能會丟掉許許多多理解(也可能不會……畢竟我語文沒那麼好)

看了一篇文章,說的是正十七邊形的尺規作圖

嗯,那篇文章,讓我回憶起了一個故事,在本文開始之前,我希望先講講故事——畢竟,如果一個人連自己“為什麼好奇”而疑惑的時候,是不可能真正滿足自己的好奇心的。

問題很簡單,也很不簡單:比較兩個數的大小。

說它簡單是因為,是個人都知道,3比2大,2019比1994大

然而,事情並沒有那麼簡單,比如我們知道“天”跟“地”在計算機裡,都是由某種編碼儲存的——那麼,在utf-8編碼下,天大還是地大??

事實上,我們小時候學的,比較大小的方法,真的是不得了的演算法

——有一個問題叫做離散對數問題(discrete logarithm problem,DLP),這個問題有許多很漂亮但是耗時很長的演算法,歸根結底只是,我們不能透過我們定義的規則比較大小的緣故

……扯遠了,返回“比較大小”吧。

小學一年級的比較大小,是這樣寫的:

對兩個自然數,比較大小的時候先比較它們的位數,位數相等則從最高位開始依次比較,若某一位不相等,這一位較大的數字更大,否則兩數相等

原話忘掉了,但大概是這樣的一個東西。

我背這個,背到了小學三年級,而後遇到了一道題

比較

1

與無限迴圈小數

0.\dot{9}

我按照那個演算法來了

首先對齊小數點,然後從最高位開始比較,1比0大,演算法結束——

1>0.\dot{9}

當時我氣得不行,差點直接翻出小學一年級的數學書跟老師理論。幸運的是老師很快說服了意志不堅定的我,否則說不得數學考出過69+20(滿分100+20,+20是附加題,只是好看,並不計入排名)的我就要棄理從文了。

誰錯了?

1顯然是等於

0.\dot{9}

的,而小學一年級的數學書也註明了,“對兩個自然數”——顯然

0.\dot{9}

在大多數人眼中不是自然數(然而……這個數等於1,1是自然數,所以

0.\dot{9}

是自然數……這是我剛剛想到的……簡直有毒)

——能記住的,只有那時候老師用的9x=9那種證法,我忘記了有沒有用過

a<{a+b\over2}<b

這個證法——但我個人更傾向這種證法,哪怕對文科生,只要你讓ta指出

1+0.\dot{9}\over2

的小數表示形式,ta基本就明白這兩個數字相等了——而對文科生,(10-1)x=9。000000。。。這種證法很可能超出了50%文科生的數學理解能力。

有時候我真的很不信任大學以下的教科書(大學教科書只有印刷錯誤,但大學之下的教科書並不是這樣。)原因很簡單,我們費盡千辛萬苦學到的,很可能是錯的——而正因為它們處在更靠前更容易理解的位置,我們反而容易因此,在理解了書作者想要我們理解的一切的同時,收穫許多本不應該收穫的誤解。

——那又有什麼關係呢?你的小學很好,於是你上了一個好初中,於是你上了一個好高中,結果,高考失利——哪怕你知道,高考失利是小學初中老師的沉痾弊疾積重難返——那又如何?難道你還能去小學老師那裡,理直氣壯地說,“都是你沒教好我”嗎?

有一種錯覺叫做“我會”——因為很多人把“我會”等同於“我明白”,就比如,每個人都會玩dota之類的遊戲——哪怕你沒接觸過,你也會操控英雄,衝出兵線,跑到對方防禦塔下,然後被對方英雄擊殺——然而,這樣的“會”,又怎麼能真正的,等同於“明白”呢?

這一次,我想寫的,則是,明明白白的Fermat素數與正N邊形的關係。

說實在的,理解這一堆東西,並不容易,如果你只是想,像“學會如何比較大小”一樣,“學會如何做正十七邊形”,你們可能還需要自己補充“如何用尺規開根號,做乘除法”這件事。如果你已經學會了正十七邊形的做法,而想知道更靠後的,比如正二百五十七邊形的做法,讀這篇文章,正當時。

當然,如果你其實感興趣的是正65537邊形……你可以直接讀論文了,這篇文章對你而言,或許,太過淺顯了一些。

Gauss的工作,其實是相當漂亮的

然而,在理解這種漂亮之前,我們必須先認識幾個漂亮的事物,比如同餘,比如原根。

為什麼會出現這兩個東西呢?因為,三角函式,本來就是自帶一個“求餘數”功能的,兩個除以

2\pi

“餘數”相同的數字,它們的三角函式值也是相同的——這便是“同餘”的意義,歸根結底只是簡化計算而已。

至於為什麼我說“求餘數”,大約是,我們在算比如

\text{cos}{2\pi\over7}

的時候,我們可以看作是在計算

\text{cos}(2\pi{1\over7})

,所有除以

2\pi

的“餘數”是

2\pi{1\over7}

的數字,它們的餘弦值都會等於

\text{cos}(2\pi{1\over7})

,由於大家都是除以

2\pi

難以分辨,我們不妨寫成把這類數字率先除以

2\pi

——然後我們就看到了這類數字的真面目:除以

2\pi

之後得到的結果是,【除以7餘1】

為了不羅索,接下來的討論將不涉及

2\pi

這個煩人的東西。

原根,在說這個概念之前,我們需要複習另一個概念,既約剩餘系,或者,簡化剩餘系。

這些,對初學者來說過於複雜,如果有興趣可以看一看“費馬小定理”嗯,就是“費馬大定理”的那個費馬,這是他提出的小定理——看完這個小定理,就可以學原根的相關知識了。

原根,是一種,對每一個素數都存在的神奇數字,比如3就是17(以及所有費馬素數)的原根

我們會發現,3的1到16次方除以17的餘數互不相同,而且3^16除以17餘數恰好是1

20:07:45> a=Vec(0,16);for(i=1,16,a[i]=3^i%17);a

%1 = [3, 9, 10, 13, 5, 15, 11, 16, 14, 8, 7, 4, 12, 2, 6, 1]

有定理證明原根對所有素數都存在(不一定好找,卻很好構造)

對費馬素數,有人證明了3一定是費馬素數的原根(可能不好證,我不知道證明,但這是細節問題,下文的3可以換成任何一個原根)

Gauss做正17邊形的做法很簡單——只要尺規做出長度為

\text{cos}{2\pi\over7}

的線段,一切問題迎刃而解,而事實上這個數值等於

\frac{1}{4 \sqrt{\frac{2}{\sqrt{17}-\sqrt{2 \left(17-\sqrt{17}\right)}+\sqrt{2 \left(6 \sqrt{17}+\sqrt{2 \left(17-\sqrt{17}\right)}-\sqrt{34 \left(17-\sqrt{17}\right)}+8 \sqrt{2 \left(\sqrt{17}+17\right)}+34\right)}+15}}}

的確是一個根式——emmm,這就是最流氓的證明方法。

而解釋這個根式是怎麼來的,以及其他的素數為什麼得不出類似公式,便是這篇文章的內容。

首先,Gauss注意到了,對

\begin{split}&\text{cos}{3*2\pi\over17}+\text{cos}{9*2\pi\over17}+\text{cos}{10*2\pi\over17}+\text{cos}{13*2\pi\over17}+\text{cos}{5*2\pi\over17}+\text{cos}{15*2\pi\over17}+\text{cos}{11*2\pi\over17}+\text{cos}{16*2\pi\over17}\\ +&\text{cos}{14*2\pi\over17}+\text{cos}{8*2\pi\over17}+\text{cos}{7*2\pi\over17}+\text{cos}{4*2\pi\over17}+\text{cos}{12*2\pi\over17}+\text{cos}{2*2\pi\over17}+\text{cos}{6*2\pi\over17}+\text{cos}{1*2\pi\over17} \end{split}

這個式子的和等於-1,這個可以用

x^{17}=1

這個方程,以及韋達定理,以及尤拉公式,以及上面那一坨其實就是

\text{cos}{1*2\pi\over17}

+

\text{cos}{2*2\pi\over17}

+。。。一直加到

\text{cos}{16*2\pi\over17}

,推出這一坨的和等於-1真的是相當容易的,甚至對於那些不是費馬素數的數字,我們已然可以推出一個類似的等式。

這時候,天才的Gauss想到,我們能否把這組數字分成a與b,然後把a跟b分別求出來呢?

——事實上,如果知道兩數和,知道兩數積,求出這兩個數字是相當容易的事情,在這裡,困難的只是,

推出它們的乘積

事實上,“乘積”才是“費馬素數”這個條件的關鍵——不理解“乘積”,便不能理解“費馬素數”。

而乘積,處理方法只是,和差化積

其實有時候,問題比你想象得簡單很多

只要肯算,就能算出來

然而不算,或者看到“肯算就有答案”所以“勞資不算了”

——後面這個,才是數學認知的最大障礙。

還記得題目一開始的那個問題嗎?

有些時候,有些東西,只有親手算一遍——或者至少看人家算一遍,才能理解。

慢慢算,不急,能看到這一行的,大多時間比知識更寬裕些。

我們要用的,只有這一個公式:

cos(m+n)+cos(m-n)=2cos(m)cos(n)

不知道,有沒有人原意,把這個式子裡面的m跟n乘以9

cos(9(m+n))+cos(9(m-n))=2cos(9m)cos(9n)

看上去變了

看上去沒變

變的是數字,不變的是形式。

不變的,是對稱。

——又有沒有人,把那一坨和為-1的數值,乘個9呢?

\begin{split} &\text{cos}{3*2\pi\over17}+\text{cos}{9*2\pi\over17}+\text{cos}{10*2\pi\over17}+\text{cos}{13*2\pi\over17}+\text{cos}{5*2\pi\over17}+\text{cos}{15*2\pi\over17}+\text{cos}{11*2\pi\over17}+\text{cos}{16*2\pi\over17}\\ +&\text{cos}{14*2\pi\over17}+\text{cos}{8*2\pi\over17}+\text{cos}{7*2\pi\over17}+\text{cos}{4*2\pi\over17}+\text{cos}{12*2\pi\over17}+\text{cos}{2*2\pi\over17}+\text{cos}{6*2\pi\over17}+\text{cos}{1*2\pi\over17} \end{split}

\begin{split}&\text{cos}{10*2\pi\over17}+\text{cos}{13*2\pi\over17}+\text{cos}{5*2\pi\over17}+\text{cos}{15*2\pi\over17}+\text{cos}{11*2\pi\over17}+\text{cos}{16*2\pi\over17}+\text{cos}{14*2\pi\over17}+\text{cos}{8*2\pi\over17}\\ +&\text{cos}{7*2\pi\over17}+\text{cos}{4*2\pi\over17}+\text{cos}{12*2\pi\over17}+\text{cos}{2*2\pi\over17}+\text{cos}{6*2\pi\over17}+\text{cos}{1*2\pi\over17}+\text{cos}{3*2\pi\over17}+\text{cos}{9*2\pi\over17} \end{split}

3變成了10,10變成了5,5變成了11,11變成了14,14變成了7,7變成了12,12變成了6,6變成了3,3——我們轉了一圈,哦,不對,是轉了半圈,便轉了回來。

如果我們把3,10,5,11,14,7,12,6這8個數字拎出來,剩下八個數字放一組,又會得到什麼呢?

\begin{split} &\text{cos}{3*2\pi\over17}+\text{cos}{10*2\pi\over17}+\text{cos}{5*2\pi\over17}+\text{cos}{11*2\pi\over17}+\text{cos}{14*2\pi\over17}+\text{cos}{7*2\pi\over17}+\text{cos}{12*2\pi\over17}+\text{cos}{6*2\pi\over17}\\ +&\text{cos}{9*2\pi\over17}+\text{cos}{13*2\pi\over17}+\text{cos}{15*2\pi\over17}+\text{cos}{16*2\pi\over17}+\text{cos}{8*2\pi\over17}+\text{cos}{4*2\pi\over17}+\text{cos}{2*2\pi\over17}+\text{cos}{1*2\pi\over17} \end{split}

remark:你們看到的8,4,2,1(如果你們看到了)可能並不是巧合,而很可能是“3是原根”的某個證據。

這一坨東西的和仍然是-1,而它們的乘積呢?

\begin{split} &\left(\text{cos}{3*2\pi\over17}+\text{cos}{10*2\pi\over17}+\text{cos}{5*2\pi\over17}+\text{cos}{11*2\pi\over17}+\text{cos}{14*2\pi\over17}+\text{cos}{7*2\pi\over17}+\text{cos}{12*2\pi\over17}+\text{cos}{6*2\pi\over17}\right)\\ &\left(\text{cos}{9*2\pi\over17}+\text{cos}{13*2\pi\over17}+\text{cos}{15*2\pi\over17}+\text{cos}{16*2\pi\over17}+\text{cos}{8*2\pi\over17}+\text{cos}{4*2\pi\over17}+\text{cos}{2*2\pi\over17}+\text{cos}{1*2\pi\over17}\right) \end{split}

這坨東西,cos裡面乘9相當於不乘——於是它們和差化積的結果,也應該是“乘9等於不乘”的那種

說明了什麼?——很顯然,這說明了,和差化積之後得到的cos(m*2pi/17),與cos(9m*2pi/17)的係數是相同的。

係數相同,這是很重要的一點。

還記得剛剛轉的那個“半圈”嗎?只要我們算出“半圈”裡面的一個數字的係數,我們就算出了這“半圈”裡面全部數字的係數。

和差化積,免不了

然而,我們完全可以把這件事做得更簡單一些——或者更簡單一些,我們乘3

乘3會改變這兩部分的值——或者說,不算改變,因為乘3只是做了交換。

兩部分交換了,乘積卻沒有變,也就是,兩個“半圈”的係數應該是相等的

——也就是說,你和差化積之後生成的那些項,

至少在這一步

,是相等的

Remark2:之後就未必相等了

和差化積之後,我們算出,這兩部分的乘積,於是可以算出這兩部分的值

不知道你們有沒有注意到,這兩個“半圈”,會出現在下一步和差化積之中,而下一步的“交換”,可以保證下一步中的“半圈”係數都相等,也就是,在做和差化積之後,你不會尷尬地發現,化出來的結果你不知道等於多少。

Gauss就這樣一步步把結果化出來了

至於為啥Gauss沒在論文裡給出一個正十七邊形……難道你還想讓Gauss順手畫一個正65537邊形嗎?

最後,為了防止大家覺得我是在瞎寫,給幾個係數好了

正257邊形

l31 l35 - (2*l21 + 5*l22 + 4*l23 + 5*l20) // N

1。42109*10^-14

在正257邊形化簡的第三步,出現了若干個1/4圈,這4個圈的係數分別是2,5,4,5

——四個1/4圈的係數並不相等,但在圈的內部,所有項都是一樣的

所以,我們可以計算出名叫l31跟l35這兩個1/8圈的乘積為(2*l21 + 5*l22 + 4*l23 + 5*l20)

和差化積時候手賤乘3乘9,只是為了防止圈內的係數不相等的。

否則,如果你算出來一個類似l31跟l35這兩個1/8圈的乘積為(2*l21 + 5*l22 + 4*l23 + 5*l20)+Cos[6pi/257]-Cos[11pi/257]之類的結果……就算Gauss在世人家也救不了你的。

Gauss所做的一切只是,找到了一個迭代的二分演算法,不斷地將cos(i pi/k)分成兩組並藉助方程分別求出每一組的值:

說具體一點,對Fermat素數p,如果記

f_p(n,m)=\sum _{i=1}^{\frac{p-1}{2^n}} \cos \left(3^{2^ni+m}\times\frac{2\pi}{p}\right)

,那麼

\(f_p(n,m)+f_p(n,m+2^{n-1})=f_p(n-1,m)\)

f_p(n,m)f_p(n,m+2^{n-1})

為集合

\{f_p(n-1,m)|m=1,2,...,2^{n-1}\}

中元素的有理係數的線性組合。

證明

\(f_p(n,m)+f_p(n,m+2^{n-1})=f_p(n-1,m)\)

相當容易,我們只需要對比一下兩邊係數是否一致。

計算

f_p(n,m)f_p(n,m+2^{n-1})

,需要注意到這樣一個事實:

如果記

g_p(n,m,k)=\sum _{i=1}^{\frac{p-1}{2^n}} \cos \left(k\times3^{2^ni+m}\times\frac{2\pi}{p}\right)

那麼

g_p(n,m,3^{2^{n-1}})=f_p(n,m+2^{n-1})

g_p(n,m+2^{n-1},3^{2^{n-1}})=f_p(n,m)

從而

f_p(n,m)f_p(n,m+2^{n-1})=g_p(n,m,3^{2^{n-1}})g_p(n,m+2^{n-1},3^{2^{n-1}})

注意到

2\cos(3^{2^{n-1}}m)\cos(3^{2^{n-1}}n)=\cos(3^{2^{n-1}}(m+n))+\cos(3^{2^{n-1}}(m-n))

(*)

如果記積化和差之後的結果

2f_p(n,m)f_p(n,m+2^{n-1})=\sum_{i=1}^{p-1}c_i\cos(3^i\times\frac{2\pi}p)

那麼

2g_p(n,m,3^{2^{n-1}})g_p(n,m+2^{n-1},3^{2^{n-1}})=\sum_{i=1}^{p-1}c_i\cos(3^{2^{n-1}}\times3^i\times\frac{2\pi}p)

(這是將(*)作用在上一式的結果)

由於c是積化和差的結果是整數,由此比較係數可知,

c_{i}=c_{i+2^{n-1}}

,將全部相等的ci拿出來,可以看出,組成的係數恰好是

f_p(n-1,m)

的各項,從而可以設

f_p(n,m)f_p(n,m+2^{n-1})=\sum_{m=1}^{2^{n-1}}\frac{C_m}{2}f(n-1,m)

這裡Cm的演算法,仍然還需要求助手動積化和差,但……算到這裡之後,剩下的部分都是已知的與體力活,是可以手算出結果的——到這裡,我們就完成了理論部分的推導。

事實上,如果不要求尺規作圖,或者允許三等分角,那麼只要是

2^a3^b+1

素數,我們應該可以畫出正

2^a3^b+1

邊形,思路還是一樣,藉助Vieta定理湊三數和,三數積與兩兩積的和,之後用一個類似(*)的公式(那裡面的3需要換成另一個有意義的原根)保證湊出來的結果都是已知結果的線性組合,就可以計算了

——至於這個的證明,就留作習題吧……