又是美美
的一波圖
用極座標表示出 5000 和 50000 以內的素數
有技術宅指出公式是,若 p 是素數,則 {(x,y) | x=p*cos(p), y=p*sin(p)} 被標記
求問 5000 以內那個圖,倆條白色螺旋線是怎麼回事?如何形成的?是線上絕對沒有素數嗎?原理是什麼?和斐波那契螺旋、黃金分割之類的什麼關係?
題主的問題實在太有趣了,我半夜爬起來研究這個問題,搬個板凳慢慢講給你聽。
咱不看500到50000那麼多的質數了,看500到1500就夠了,並且把質數塗成藍色,把合數塗成紅色,就得到:
發現了吧,大概11點鐘方向和5點鐘方向的確各有三列數全是合數。如果你還是看不太清楚,我把500-20000內的質數和這三條全是合數的線畫出來:
數一下第一個圖,會發現視覺上向外輻射的螺旋線一共有44條,為什麼這44條曲線中恰好有6條上沒有質數?下面來解決這個問題。
1.
為什麼恰好有44條螺旋線
實際上螺旋線上的自然數並不相互挨著,自然數是跳躍著旋轉排列的(相差一弧度也就是約57度),挑出500-550之間的自然數,相鄰自然數用短線連上,是這個樣子分佈的:
如果兩個自然數m,n的夾角之差 | m - n | 恰好接近2π的整數倍,它們在圖上就會處在同一個方向,也就是一條螺旋線上,而:
恰好是一個非常接近整數的數,所以每隔44個自然數,兩個自然數就會落在同一條螺旋線上,而多出來的0.0028,就是為啥每一條螺旋線會輕微逆時針旋轉的原因。
2.
為什麼有六條螺旋線上沒有質數
我們只討論大於500的自然數,在螺旋線上找到一個已知點後就可以得到:
左上角的三條全合數螺旋線為:536+44k,517+44k,542+44k
右下角的三條全合數螺旋線為:520+44k,514+44k,539+44k
因為536、542、520、514四個數是偶數,所以無論加多少個44結果還是偶數,所以這四條螺旋線全是合數;
因為517和539有因數11,所以無論加上多少個44結果還是能被11整除,所以這兩條螺旋線也全是合數。
3.
只有這六條螺旋線上沒有質數嗎
不是的,只要有一個偶數出現,一條螺旋線上就不會再有質數出現了,因為加多少44還是偶數。
這六條螺旋線只是因為三條相鄰線上都沒有質數(拜517和539這倆11的奇數倍數出現所賜),連在一起視覺上更加顯眼而已。如果把所有沒有質數的螺旋畫出來,應該是這樣:
連續44個自然數中,能被11整除的奇數只有兩個,相隔22,這就是為啥只有兩條奇葩的對稱的全合數螺旋線小集團脫穎而出。
4.
當素數表越來越大時會怎樣
我們會發現更多更接近2π倍數的整數,比如:
但下面這個數710則更加接近,並且它是偶數,根據前面的推導,可以看到更多純合數的懸臂:
1萬個自然數跨度上,上面44條螺旋線的懸臂旋轉幅度是:
從上面的圖片可以驗證這一點,每1萬個自然跨度下,懸臂旋轉半圈多一點。
可以猜測當有很多素數時,將形成710條向外輻射的螺旋線,並且這些螺旋線相當直,每100萬個自然數能夠使它旋轉:
也就是說每一百萬個自然數跨度上,這710條懸臂只旋轉5度。如果你生成前一億自然數中的質數圖,才能發現懸臂轉過一圈。
由於710=2×5×71,可見710條懸臂中編號是2、5、71倍數的懸臂都是純合數懸臂,我們能找到更多3條相鄰懸臂都是合數的情況出現。存在5條相鄰的合數懸臂,比如編號為212,213,214,215,216的懸臂。
手頭沒有那麼大的質數表,就不畫圖了,留個念想。
回答完畢。
=========強迫症的分割線=========
5.
驗證猜想
從wiki質數頁面鏈接到一個提供質數表的網站The first fifty million primes,下載了前一百萬個質數,現在把區間[1006721, 15485863]之間也就是一百萬到一千五百萬之間的質數畫出來是這樣:
數一數,一共有71條粗懸臂,把左邊部分拉近點看:
可以看到每一條粗懸臂一般含有四條細懸臂。這是因為10個連續自然數中除去5個2的倍數和兩個5的倍數,還剩四個數,只有在這四個數代表的懸臂上才有可能出現質數。十點鐘方向上較大的空白是五條相鄰的合數懸臂。這些懸臂在跨度1400萬的自然數區間內只旋轉了不到70度,完美驗證了上一節的猜測。
經梅成廣提醒,Matlab的A=primes(n);函數可以瞬間產生比n小的所有質數,好方便有沒有!經測試這個函數可以返回值小於1.2億的所有質數。
Matlab代碼如下:
function testprime()
x = [];y = [];x1 = [];y1 = [];x2 = [];y2 = [];
close all
%改下面這個數
n = 10000;
%可以使用primes函數快速生成小於1.2億的質數
for i=500:n
data(i) = isprime(i);
if data(i)
x(end+1) = i*cos(i);
y(end+1) = i*sin(i);
else
x1(end+1) = i*cos(i);
y1(end+1) = i*sin(i);
end
x2(end+1) = i*cos(i);
y2(end+1) = i*sin(i);
end
%全部質數
plot(x, y, '.');axis equal
%全部合數
figure;plot(x1,y1,'.r');axis equal
%全部自然數
figure;plot(x, y, '.',x1,y1,'.r');axis equal
%自然數,用短線連
figure;plot(x2,y2,'b');axis equal
%突出螺旋線
figure;plot(x, y, '.');axis equal
%A = [536,517,542,520,514,539];
A = 514:2:558;
A(end+1) = 517;
A(end+1) = 539;
for i=1:length(A)
rr = [];
k = A(i);
while k<=n
rr(end+1) = k;
k = k + 44;
end
hold on;plot(rr.*cos(rr), rr.*sin(rr), 'r-');
end
end
https://www.zhihu.com/question/24236455/answer/27138389
----這裡是數學思維的聚集地------
閱讀更多 超級數學建模 的文章