百科问答小站 logo
百科问答小站 font logo



可以找到两个质数,他们的比值最接近 π 吗? 第1页

  

user avatar   jin-chi-zhong 网友的相关建议: 
      

有人证明了两个素数相除也是稠密的。。。

所以任给一个实数x<π,必然能找到一对素数P,Q使得

所以答案是否定的。


user avatar   rose5378192 网友的相关建议: 
      

Mathematica对于该问题的解答

首先其他答主已经说明了,质数的比值是稠密的,因此显然答案是否定的(可以仿照极限的定义)。而整数与整数的比值,是有理数, 是无理数,因此两质数之比可以无限逼近 却不能与之相等。现用Mathematica探讨此问题。首先,只要有一个给定的「精度预期」,必然可以找出在该精度范围内最接近 的质数比值。需要说明的是,这个「精度预期」可以用分子的最大或分母的最大值来定义。鉴于答主极Low的Mathematica水平,这里采用比较易于编写的分子最大值为例。

先给出完整的代码

                FractionList         [         x_         ]                   :=                   Table         [         Prime         [         x         ]         /         Prime         [         n         ],                   {         n         ,                   1         ,                   x         }]                            p         [         x_         ]                   :=                   Flatten         [                               Position         [         Abs         [         FractionList         [         x         ]                   -                   Pi         ],                                 Min         @         Abs         [         FractionList         [         x         ]                   -                   Pi         ]]][[         1         ]]                            MinLossFraction         [         x_         ]                   :=                   FractionList         [         x         ][[         p         [         x         ]]]                            ApPiList         [         x_         ]                   :=                   Table         [         MinLossFraction         [         n         ],                   {         n         ,                   1         ,                   x         }]                            MP         [         x_         ]                   :=                              ApPiList         [         x         ][[         Flatten         [                                 Position         [         Abs         [         ApPiList         [         x         ]                   -                   Pi         ],                                   Min         [         Abs         [         ApPiList         [         x         ]                   -                   Pi         ]]]][[         1         ]]]]            

大致的思路是:先找出以第 个质数为分子 , 以内所有质数为分母的所有比值构成的List,然后再与作差,取绝对值。选出差最小的那一项所对应的比值。然后取一定范围以内的所有质数重复以上操作,再从中取最小值对应的比值即可

运行示例如下:

但这种算法的问题在于,需要先把所有可能的比值都算出来,再进行比较。这就造成了运算所需的时间被大大拉长,而实际上很多计算是不必要的。以本人老爷机的I5-4590为例,运算第120个质数以内最接近 的比值所需要的时间就有0.33s。如果再把精度提升,到了1000个质数以内,运算时间就会大幅度增加到41.52s之长。而这显然不利于高精度计算。

精度的分布

为了研究当分子大小变化时比值的精度情况(即与 的差的绝对值),现取第 到第 个质数作为分子,取以每一种情况下最接近 的那个比值的精度。

       Table[Abs[MP[n] - Pi], {n, 1, 80}]     

输出结果:{2.14159, 1.64159, 0.641593, 0.358407, 0.358407, 0.358407, 0.258407, 0.258407, 0.144122, 0.144122, 0.144122, 0.144122, 0.0122535, 0.0122535, 0.0122535, 0.0122535, 0.0122535, 0.0122535, 0.0122535, 0.0122535, 0.0122535, 0.0122535, 0.0122535, 0.0122535, 0.0122535, 0.0122535, 0.0122535, 0.0122535, 0.0122535, 0.0122535, 0.0122535, 0.0122535, 0.0122535, 0.0122535, 0.0122535, 0.0122535, 0.0122535, 0.0122535, 0.00935074, 0.00935074, 0.00935074, 0.00935074, 0.00935074, 0.00935074, 0.00935074, 0.00935074, 0.00766108, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583, 0.000747583}

绘制成图像如下所示:

由图像可以看出,精度随「精度预期」的增加呈阶梯状下降。因为电脑运算能力有限,所以没能给出更加靠后的数据。

因此我们可以得出结论,随着「精度预期」的增加,

①可以得到越来越精确的质数之比,使得它更加接近于

②不存在一组质数 ,使得其比值恰好为 ,因为有理数 无理数

③永远都不会有一组质数的比最接近于 ,因为质数的比是稠密的



8.23 20:44

经过优化,现运算速度大幅度提高。修改后的代码如下:

                FindRegion1         [         x_         ]                   :=                   PrimePi         [         Prime         [         x         ]         /         3.2         ]                            FindRegion2         [         x_         ]                   :=                   PrimePi         [         Prime         [         x         ]         /         3.08         ]                            FractionList         [         x_         ]                   :=                              Table         [         Prime         [         x         ]         /         Prime         [         n         ],                   {         n         ,                   FindRegion1         [         x         ],                   FindRegion2         [         x         ]}]                            p         [         x_         ]                   :=                   Flatten         [                               Position         [         Abs         [         FractionList         [         x         ]                   -                   Pi         ],                                 Min         @         Abs         [         FractionList         [         x         ]                   -                   Pi         ]]][[         1         ]]                            MinLossFraction         [         x_         ]                   :=                   FractionList         [         x         ][[         p         [         x         ]]]                            ApPiList         [         x_         ]                   :=                   Table         [         MinLossFraction         [         n         ],                   {         n         ,                   4         ,                   x         }]                            MP         [         x_         ]                   :=                              ApPiList         [         x         ][[         Flatten         [                                 Position         [         Abs         [         ApPiList         [         x         ]                   -                   Pi         ],                                   Min         [         Abs         [         ApPiList         [         x         ]                   -                   Pi         ]]]][[         1         ]]]]            

优化方法是将分母的范围大大缩小,从原来的小于 的全体质数修改到了现在分子的 至 。这可以减少许多冗余的计算,从而提高运算速度。

新代码的运行时间如下:

只花费了1.51s,相当于原来的 ,而当「精度预期」更高时,时间的减少倍数将会越高。答主测试时,用旧代码运行 需要180s,而用新代码运行只需要4.5s。

值得注意的是,当用FindRegion函数进行范围缩小时, 在 ~ 的运算中,因为 过小,所以会出现“第0个质数”导致程序错误。而本身 ~ 精度旧非常低,没有什么实际意义,所以就将这三组近似的计算从程序中删除了。


8.24 9:03

非常感谢评论区@233所提供的思路。修改后的代码如下:

       FindPrime1[x_] := PrimePi[Prime[x]/Pi] FindPrime2[x_] := PrimePi[Prime[x]/Pi] + 1 FractionPair[x_] := {Prime[x]/Prime[FindPrime1[x]],    Prime[x]/Prime[FindPrime2[x]]} p[x_] := Flatten[    Position[Abs[FractionPair[x] - Pi],      Min@Abs[FractionPair[x] - Pi]]][[1]] MinLossFraction[x_] := FractionPair[x][[p[x]]] ApPiList[x_] := Table[MinLossFraction[n], {n, 4, x}] MP[x_] :=   ApPiList[x][[Flatten[      Position[Abs[ApPiList[x] - Pi],        Min[Abs[ApPiList[x] - Pi]]]][[1]]]]     

改进的地方在于,当分子确定时,分母的取值范围已经缩小到了只有两个数,即不超过分子除以 的最大质数以及大于分子除以 的最小质数。这就导致了对于每一个 ,所需要做的除法只有两次。按照目前的测试,计算 只需要0.3s,而计算 也只用了3.8s。

如果有更好的算法,可以在评论进行回复


重磅!!!

经过接近9小时的运算,答主已经将 的值算了出来。截图如下:

有需要的读者可以复制结果进行使用。


user avatar   jin-bo-luo 网友的相关建议: 
      

最高票答案的素数之比稠密并不是多难证明的问题,这就是个素数定理的简单推论,评论里不能写公式,单写一下证明吧:

素数定理

给定任意正数 ,都有:

极限大于1,说明只要x足够大, 和 之间必然有至少一个质数。

利用这个,对于任意正实数a,给定任意邻域大小 ,找一对素数p,q满足

怎么找,很简单,转换一下:

所以根据前面的结论,只要aq足够大(先找一个足够大的质数q), 和 之间必然有一个质数p,证毕。


user avatar   moobot_cn_robin 网友的相关建议: 
      

雌性动物眼中, 雄性动物漂亮/有吸引力.

雄性动物眼中, 雌性动物漂亮/有吸引力.

男性眼中, 女性漂亮/有吸引力.

女性眼中, 男性漂亮/有吸引力.


默猜题主是男人, 或雌性动物.


雄性孔雀, 颜色丰富; 那么女性是否比男性颜色更多?

雌性猴子的红屁股, 算好看算不好看?




  

相关话题

  如何评价吴文俊《东方数学的使命》? 
  请问(0,1)和(1,+∞)之间的数一样多吗? 
  为什么三体中说改变数学规律是很可怕的? 
  数论在物理学中有哪些具体应用? 
  如何证明同一个魔方公式循环N遍后都会回到原状态? 
  负数有没有阶乘,0 的阶乘为什么是 1? 
  1+2+4+8+16+32+64+128+256+...=-1 错在哪里? 
  nπ-[nπ]是否存在收敛于0的子列? 
  如何评价网传数学家丘成桐批评清华大学在2020年大学生数学竞赛中惨败? 
  Alice 和 Bob 各有一个 0-9 的数,他们怎样能在不暴露自己数的前提下知道双方数字是否相同? 

前一个讨论
人工智能在生活中的应用都有哪些?
下一个讨论
有个人说C++程序入口是mainCRTStartup,另一个人说是main,然后打起来了,如何评理?





© 2024-12-22 - tinynew.org. All Rights Reserved.
© 2024-12-22 - tinynew.org. 保留所有权利