又是美美
的一波图
用极坐标表示出 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
转载请在公众号中,回复“转载”
----这里是数学思维的聚集地------
“超级数学建模”(微信号supermodeling),每天学一点小知识,轻松了解各种思维,做个好玩的理性派。50万数学精英都在关注!
,