2,3,5,7,11,13,19,23,27......这样一个数列,你能找到规律吗?
好吧对于你来说可能有些困难,你大可以放下手中的笔听我慢慢讲述。
我所要讲的,不是素数的分布,但却与素数有着很大的联系。
那就先明确一下目标,它是一个简短的式子:
![1619935449375783.png 目标.png](/ueditor/php/upload/image/20210502/1619935449375783.png)
当然方法不唯一,这里就有一个简单的方法:
![1619935502379572.png 常规解答.png](/ueditor/php/upload/image/20210502/1619935502379572.png)
这个方法没啥问题,但它又似乎太过简短,我们无法体验到做完难题后的美好感受,没有激动、兴奋和喜悦……而且,我们学不到多少东西。
最重要的是,对于某些人来说,它超纲了——用到了微积分。
但我想分享的是另一个方法,它不需要任何前置知识,我将其称之为“基础”,但“基础”并不意味着简单,相反,你需要一个绝顶聪明的大脑。
那就不再铺垫,直接开始吧!
![1619935605223454.png 25.png](/ueditor/php/upload/image/20210502/1619935605223454.png)
有π就有圆。那么建立起一个坐标系,并画上一个半径为R的圆,而我想让你做到,是找出圆内所有的整数坐标点的个数。
你可能会在连续半径下寻找规律,但似乎毫无规律。那么抓住线索——整数坐标点。比如(2,3)这个点,你算得它离原点的距离为
,根号下的数是整数。普遍地看整个坐标系,任何一个整数坐标点到原点的距离为
,N为非负整数。利用这个线索,我们可以找到半径为
的圆的圆周经过的整数坐标点的个数,设其为P(N),即定义函数P(N)表示半径为
的圆的圆周上整数坐标点的个数。
![1619936355192692.png 25o.png](/ueditor/php/upload/image/20210502/1619936355192692.png)
如图,上图的圆经过了12个点,它的半径为
,所以P(25)=12。
这样做的原因是为了对圆内的点进行分类,从而简化问题。
![1619935605223454.png 25.png](https://acgn.zone/ueditor/php/upload/image/20210502/1619935605223454.png)
![1619936584422680.png n25.png](/ueditor/php/upload/image/20210502/1619936584422680.png)
注:这里为了更直观,只化了过了整数坐标点的圆,实际上还有一些不经过的,如半径为
的圆,它的圆周不会经过任何整数坐标点,所以P(3)=0。
对比两张图,那么
就表示为半径为
的圆内所有的整数坐标点的个数,就这么一圈一圈的相加……
接下来就是求P(N)这个函数了。
先来看一个简单的例子,P(5)=?其实这挺简单的。
![1619936957156974.png 图片6.png](/ueditor/php/upload/image/20210502/1619936957156974.png)
共8中方式(对应8个坐标),所以P(5)=8。
![1619938908270868.png 5o.png](/ueditor/php/upload/image/20210502/1619938908270868.png)
但这么长一串的式子太繁杂,不如将它表示为5=(2+i)(2-i),其中i为虚数单位,
。
这样做,不单只是简化,而是有一定原因的,在知道原因之前,你应该晓得:扩充数域,总会给我们意想不到的惊喜!!!
如果你还不了解复数,这里会给出一个简单的说明(当然你也可以跳过):
![1619937060868954.png numl.png](/ueditor/php/upload/image/20210502/1619937060868954.png)
一个数乘上-1会得到它的相反数,在数轴上就是绕原点旋转180度,而
,乘上两个i得到了-1旋转了180度,那么乘一个i就表示绕原点旋转90度,我们就开辟出了新的坐标系统。
![1619937171354774.png cp.png](/ueditor/php/upload/image/20210502/1619937171354774.png)
其中横轴为实轴,纵轴为虚轴,这个平面就叫做复平面,形如a+bi的数就是复数。
回归正题,5=(2+i)(2-i)只给出了2+i和2-i两个点,不是一共有8个点吗?其它6个呢?
其实还有5=(-2+i)(-2-i)=(1+2i)()1-2i)=(-1+2i)(-1-2i)
仔细观察你会发现这些式子都是原来的一个式子乘上-1,i,-i后的结果,而且这也很容易通过图像理解。为方便表达,我把最开始得到的式子称为一对“共轭基数”(共轭对指a+bi和a-bi,而这种数特别的地方在于“基”这个字,它乘-1,i,-i后就是其它共轭对了,它创造了这些数,所以叫做“基数”),而其中不能再分解的数被称为“高斯素数”。5等于两个共轭基数相乘,分别乘了1,-1,i,-i得到了4对共轭对,那么它就有8个分解出来的高斯素数,而刚好在这里这些高斯素数就是它所经过的整数坐标点的个数。
所以P(5)=2*4=8 2表示共轭基数的个数,4是因为它乘了1,-1,i,-i(多次强调,你会了吗?)
再来看P(25),
![1619937518249201.png 图片8.png](/ueditor/php/upload/image/20210502/1619937518249201.png)
它由4个高斯素数相乘得来,能分配出(3+4i),(3-4i),5三个基数,因此P(25)=3*4=12。再由上面图像检查是对的。
再看到P(125),
![1619937594971298.png 图片9.png](/ueditor/php/upload/image/20210502/1619937594971298.png)
,你得到了这两种不重复的分配方式,并得到了
四个基数即两对共轭基数。所以P(125)=4*4=16。
![1619937738361967.png 125.png](/ueditor/php/upload/image/20210502/1619937738361967.png)
到此,规律也十分明显了:
。但是并不一定完全有规律,你需要仔细想想,多找几个例子,比如求P(625),寻找更普遍的规律且有依据。实际上,
,当n为奇数时,它能分成2n个高斯素数相乘,然后你能找到
种不同的分配方式(这是肯定的),那么此时就有n+1个基数,
;当n为偶数时,它也能分成2n个高斯素数相乘,可它有
个高斯素数分配方式和一个整数分配方式(即
),但它竟然也能有n+1个基数,因此
在此时依然成立.
实际上不只是5,其它能分解的素数都有这样的规律。比如
等,你会发现这些都是4n+1这个类型的素数,那么除掉4n+1和2n(这是肯定的不是素数),正整数范围内就只剩下4n+3这个类型的素数不能分解了,如3,7,19等。
关于此,我确信已发现了一种美妙的证法,可惜这里空白的地方太小,写不下。所以你可以试着去证明它!!!
再来个例子
,
的每对基数和
的每对基数组成了新的一对基数,其中
有2对,
有1.5对,分别配对就得到
对,但其实每对有两种分配方式,比如
不仅可以等于
还可以等于
,因此更准确地说是能分成6对,就有12个基数。
所以
,整体来看是
(这个数太大,所以不能可视化了)
普遍地对于任何可分解素数p都满足:
![1619938395293745.png 图片30.png](/ueditor/php/upload/image/20210502/1619938395293745.png)
再来看一下4n+3型的素数,因为它不能分解,所以P(4n+3)=0,但它的平方就有路走了,比如P(9),
,它有一个基数3,所以
。
再来个例子P(15)=?
,多出来的这个3导致无法产生共轭对,所以P(15)=0,
![1619938568751365.png 15.png](/ueditor/php/upload/image/20210502/1619938568751365.png)
但如果再多一个3的话:
,所以P(45)=8。
![1619938654716099.png 45.png](/ueditor/php/upload/image/20210502/1619938654716099.png)
这就要看3的指数是奇数还是偶数了,除了3,其它的4n+3型素数也一样。
最后特别说下最特殊的素数2,它并不是不能分解:
,但是
,也就是说它只有一个基数。所以
。因为2只有一个基数,所以一个数乘了2后并不会改变它经过的整数坐标点的个数。
![1619938908270868.png 5o.png](https://acgn.zone/ueditor/php/upload/image/20210502/1619938908270868.png)
![1619938985523332.png 10o.png](/ueditor/php/upload/image/20210502/1619938985523332.png)
![1619939085356042.png 20o.png](/ueditor/php/upload/image/20210502/1619939085356042.png)
![1619939165691103.png 40o.png](/ueditor/php/upload/image/20210502/1619939165691103.png)
如图,![1619939247271434.png 图片38.png](/ueditor/php/upload/image/20210502/1619939247271434.png)
到此,我们就搞懂了P(n)这个函数,但它的函数值出现地也太没规律了吧!于是我们需要找到另一种表达方式,
就是一个不错的表达方式(
是希腊字母,读作/kaɪ/),
这个函数定义得十分精妙:
,
,
是否感到有些眼熟?这不分类嘛!!!把全体正整数带进去会得到
……就这么1,0,-1,0地循环,即复平面中1一直乘i后结果的实部。
而且它还是个“积性”函数,意思是
,你可以代数进去验证,而且这个挺好证明的,你自己就可以试一下。
很多时候,人们往往无法理解分类的意义,但当你在生活中去应用它的时候,有些无序的东西立马就变得有条理起来,数学也一样。
看P(45)这个例子,在经过上文的训练过后你很容易算得P(45)=8,然后你会神奇地发现:
![1619939479891673.png 图片46.png](/ueditor/php/upload/image/20210502/1619939479891673.png)
再利用积性性质打开括号得到:
![1619939492835222.png 图片47.png](/ueditor/php/upload/image/20210502/1619939492835222.png)
其中的
输入值竟然为P(N)函数输入值的因数!!!而且这规律对于所有的正整数都适用。这也很好理解,就是括号里每一项分别相乘的结果。
那么——
![1619939606284870.png 图片48.png](/ueditor/php/upload/image/20210502/1619939606284870.png)
R越大,圆内的整数坐标点越密,约等号两
边越相近。再观察,每一部分都有X(1),每两部分有X(2),每三部分有X(3)……
![1619939701311434.png 图片49.png](/ueditor/php/upload/image/20210502/1619939701311434.png)
当R趋于无穷时,两式就可以划等,此时约掉两边的
,移个项,就得到了最开始的那个式子了:
![1619935449375783.png 目标.png](https://acgn.zone/ueditor/php/upload/image/20210502/1619935449375783.png)
![1619939764508951.png 1000.png](/ueditor/php/upload/image/20210502/1619939764508951.png)
![1619939777140357.png 5000.png](/ueditor/php/upload/image/20210502/1619939777140357.png)
跑了好久才跑出来的,电脑都要炸了啊啊!!
补充:上式所算的没有P(0)这一项,而它只有一个原点,相对于圆内无穷多个点就显得微不足道,故省去。
尾声:
我第一次看到这个时也十分震惊,这与作业本上的不同,它是美妙的,也许生活中用不到它,但它却给我带来了最美好的感受。
对于数学,它不应该是追名逐利的工具,我不希望用它来比高下,它从来不在于你做了多少练习题,而在于你对它的深入理解。
我想与他人分享这样的美好感受,这也是我做此科普的初衷。这是我的第一次科普,前后改了三四遍,也花了我大量时间。我尽力地去讲述清楚和简化内容,也用到了通俗的语言呈现在你的面前。就像前面所说的,它不会用到高深的数学知识。
有人说,做这样的难题没有实际意义。可能确实是这样,它没有傅立叶变换之类的数学工具好用,但你却能通过它获得了美好感受,还探讨了素数、复数和π之间的联系。而它们似乎与一个神奇的函数——黎曼ζ函数有一些关联。
![1619939973913565.png 图片52.png](/ueditor/php/upload/image/20210502/1619939973913565.png)
这是一个神奇的式子,它由欧拉提出的两个式子组成:
和
。
3b1b的创始人Grant曾经做了一个关于滑块碰撞撞出π的科普。
(HTTP://www.bilibili.com/video/BV1nt411p7F9?share_source=copy_web)
他在一次演讲上说道:“一个从事量子力学的科研人员找到我,说他把这(滑块碰撞)应用到量子力学去了!”是的,这令人震惊,有谁能想到数字会在这里出现呢?我想,也许这就是我们研究数学的原因——它总能给我们意想不到的惊喜和艺术的感受!
终于写完了,累死我了!!!其实我很早就想在里世界做科普了,在学校一直在写稿子(大部分时间是在数学课上),又排了一下午的版,做的也还是挺用心的吧。
以下是做可视化的代码,可视化工具:manim
from manimlib.imports import *
class crea(Scene):
def construct(self):
i=5
R=np.sqrt(i)#半径
tex=TexMobject("R=\\sqrt{5}").to_edge(UL)
dot=Dot(color=RED,radius=0.3/R)
circle=Circle(radius=3.5)
grif=NumberPlane(
x_min=-2*R,x_max=2*R,
y_min=-1.5*R,y_max=1.5*R,
).scale(3.5/R)
self.add(circle,grif)
self.play(Write(tex))
for y in range(-int(R)-1,int(R)+2):
for x in range(-int(R)-1,int(R)+2):
if np.sqrt(x*x+y*y)<=R:
dot=dot.copy().move_to(
np.array([x*3.5/R,y*3.5/R,0])
)
self.add(dot)
self.wait()
class allcir(Scene):
def construct(self):
i=25
R=np.sqrt(i)#半径
tex=TexMobject("R=\\sqrt{25}").to_edge(UL)
dot=Dot(color=YELLOW,radius=0.07)
circle=Circle(radius=R,stroke_width=1,color=WHITE).scale(0.7)
new_cir=Circle()
grif=NumberPlane(
x_min=-10,x_max=10,
y_min=-8,y_max=8,
).scale(0.7)
self.add(circle,grif)
self.play(Write(tex))
for y in range(-int(R)-1,int(R)+2):
for x in range(-int(R)-1,int(R)+2):
if np.sqrt(x*x+y*y)<=R:
dot=dot.copy().move_to(
np.array([x*0.7,y*0.7,0])
)
new_cir=circle.copy().scale(
np.sqrt((x*0.7)**2+(y*0.7)**2)/(R*0.7)
)
self.add(dot)
self.add(new_cir)
self.wait()
class outcir(Scene):
def construct(self):
i=25
R=np.sqrt(i)#半径
tex=TexMobject("R=\\sqrt{25}").to_edge(UL)
dot=Dot(color=RED,radius=1/R)
circle=Circle(radius=3.5)
grif=NumberPlane(
x_min=-2*R,x_max=2*R,
y_min=-1.5*R,y_max=1.5*R,
).scale(3.5/R)
self.add(circle,grif)
self.play(Write(tex))
for y in range(-int(R)-1,int(R)+2):
for x in range(-int(R)-1,int(R)+2):
if np.sqrt(x*x+y*y)==R:
dot=dot.copy().move_to(
np.array([x*3.5/R,y*3.5/R,0])
)
self.add(dot)
self.wait()
class numl(Scene):
def construct(self):
t=TexMobject("\\times(-1)")
od=Dot(radius=0.15).move_to(np.array([0,0,0]))
o=TextMobject("O").next_to(od,DOWN)
axis=NumberLine(x_min=-8,x_max=8)
dot1=Dot(radius=0.1,color=RED).shift(LEFT*2)
dot2=Dot(radius=0.1,color=RED).shift(RIGHT*2)
arc=Arc(angle=PI,radius=2,buff=4).add_tip()
t.next_to(arc,UP)
alls=VGroup(axis,dot1,dot2,arc,t,od,o)
alls.shift(DOWN)
self.add(alls)
self.wait(3)
self.play(FadeOut(alls))
cpl=ComplexPlane().add_coordinates()
im=TextMobject("Im").shift(UP*3.5+RIGHT*0.7)
re=TextMobject("Re").shift(RIGHT*6.5+DOWN*0.7)
self.add(cpl,im,re)
self.wait()
最后于 2021-5-2
被皮蒂亚编辑
,原因: 字号