用坐标画出爱心曲线(用极坐标画出的美图)(1)

又是美美

的一波图

用坐标画出爱心曲线(用极坐标画出的美图)(2)

用极坐标表示出 5000 和 50000 以内的素数

有技术宅指出公式是,若 p 是素数,则 {(x,y) | x=p*cos(p), y=p*sin(p)} 被标记

求问 5000 以内那个图,俩条白色螺旋线是怎么回事?如何形成的?是线上绝对没有素数吗?原理是什么?和斐波那契螺旋、黄金分割之类的什么关系?

题主的问题实在太有趣了,我半夜爬起来研究这个问题,搬个板凳慢慢讲给你听。

咱不看500到50000那么多的质数了,看500到1500就够了,并且把质数涂成蓝色,把合数涂成红色,就得到:

发现了吧,大概11点钟方向和5点钟方向的确各有三列数全是合数。如果你还是看不太清楚,我把500-20000内的质数和这三条全是合数的线画出来:

用坐标画出爱心曲线(用极坐标画出的美图)(3)

数一下第一个图,会发现视觉上向外辐射的螺旋线一共有44条,为什么这44条曲线中恰好有6条上没有质数?下面来解决这个问题。

用坐标画出爱心曲线(用极坐标画出的美图)(4)

1.

为什么恰好有44条螺旋线

实际上螺旋线上的自然数并不相互挨着,自然数是跳跃着旋转排列的(相差一弧度也就是约57度),挑出500-550之间的自然数,相邻自然数用短线连上,是这个样子分布的:

用坐标画出爱心曲线(用极坐标画出的美图)(5)

如果两个自然数m,n的夹角之差 | m - n | 恰好接近2π的整数倍,它们在图上就会处在同一个方向,也就是一条螺旋线上,而:

用坐标画出爱心曲线(用极坐标画出的美图)(6)

恰好是一个非常接近整数的数,所以每隔44个自然数,两个自然数就会落在同一条螺旋线上,而多出来的0.0028,就是为啥每一条螺旋线会轻微逆时针旋转的原因。

用坐标画出爱心曲线(用极坐标画出的美图)(7)

2.

为什么有六条螺旋线上没有质数

我们只讨论大于500的自然数,在螺旋线上找到一个已知点后就可以得到:

左上角的三条全合数螺旋线为:536 44k,517 44k,542 44k

右下角的三条全合数螺旋线为:520 44k,514 44k,539 44k

因为536、542、520、514四个数是偶数,所以无论加多少个44结果还是偶数,所以这四条螺旋线全是合数;

因为517和539有因数11,所以无论加上多少个44结果还是能被11整除,所以这两条螺旋线也全是合数。

用坐标画出爱心曲线(用极坐标画出的美图)(8)

3.

只有这六条螺旋线上没有质数吗

不是的,只要有一个偶数出现,一条螺旋线上就不会再有质数出现了,因为加多少44还是偶数。

这六条螺旋线只是因为三条相邻线上都没有质数(拜517和539这俩11的奇数倍数出现所赐),连在一起视觉上更加显眼而已。如果把所有没有质数的螺旋画出来,应该是这样:

用坐标画出爱心曲线(用极坐标画出的美图)(9)

连续44个自然数中,能被11整除的奇数只有两个,相隔22,这就是为啥只有两条奇葩的对称的全合数螺旋线小集团脱颖而出。

用坐标画出爱心曲线(用极坐标画出的美图)(10)

4.

当素数表越来越大时会怎样

我们会发现更多更接近2π倍数的整数,比如:

用坐标画出爱心曲线(用极坐标画出的美图)(11)

但下面这个数710则更加接近,并且它是偶数,根据前面的推导,可以看到更多纯合数的悬臂:

用坐标画出爱心曲线(用极坐标画出的美图)(12)

1万个自然数跨度上,上面44条螺旋线的悬臂旋转幅度是:

用坐标画出爱心曲线(用极坐标画出的美图)(13)

从上面的图片可以验证这一点,每1万个自然跨度下,悬臂旋转半圈多一点。

可以猜测当有很多素数时,将形成710条向外辐射的螺旋线,并且这些螺旋线相当直,每100万个自然数能够使它旋转:

用坐标画出爱心曲线(用极坐标画出的美图)(14)

也就是说每一百万个自然数跨度上,这710条悬臂只旋转5度。如果你生成前一亿自然数中的质数图,才能发现悬臂转过一圈。

由于710=2×5×71,可见710条悬臂中编号是2、5、71倍数的悬臂都是纯合数悬臂,我们能找到更多3条相邻悬臂都是合数的情况出现。存在5条相邻的合数悬臂,比如编号为212,213,214,215,216的悬臂。

手头没有那么大的质数表,就不画图了,留个念想。

回答完毕。

=========强迫症的分割线=========

用坐标画出爱心曲线(用极坐标画出的美图)(15)

5.

验证猜想

从wiki质数页面链接到一个提供质数表的网站The first fifty million primes,下载了前一百万个质数,现在把区间[1006721, 15485863]之间也就是一百万到一千五百万之间的质数画出来是这样:

用坐标画出爱心曲线(用极坐标画出的美图)(16)

数一数,一共有71条粗悬臂,把左边部分拉近点看:

用坐标画出爱心曲线(用极坐标画出的美图)(17)

可以看到每一条粗悬臂一般含有四条细悬臂。这是因为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万数学精英都在关注!

,