Prime函数的逆函数是什么函数?
本帖最后由 mathematica 于 2019-2-15 16:43 编辑用mathematica软件,
求第1个素数就用Prime
求第2个素数就用Prime
求第10个素数就用Prime
但是有时候我知道某一个素数,比如257,我想反过来求是第几个,应该如何解决呢?
比如求193707721是第几个素数,
我是这样求的
Clear["Global`*"];
s=FactorInteger[](*需要被判定的素数*)
(*先求出下界与上界*)
a=IntegerPart+Log]-0),{n,10000},WorkingPrecision->30]]
b=IntegerPart+Log]-1),{n,10000},WorkingPrecision->30]]+1
(*用二分法求得是第多少个素数*)
Do[
c=IntegerPart[(a+b)/2];
pc=Prime;
If;
If;Break[]],
{k,1,5000}
]
运行结果
193707721
10236692
10775121
{10749692,193707721}
所以193707721是第10749692个素数,我好奇软件是如何快速求解出第10749692个素数的.
循环16次,找到这个结果,要是有现成的逆函数就好了
关于第n个素数的近似公式见维基百科
https://en.wikipedia.org/wiki/Prime_number_theorem
你要的就是素数计数函数,大名鼎鼎的$pi(x)$, https://en.wikipedia.org/wiki/Prime-counting_function 不大于x的素数个数 PrimePi lsr314 发表于 2019-2-15 17:03
不大于x的素数个数 PrimePi
但是我感觉这个计数函数有什么快速的计算方法,mathematica一下子就算出来了,不像是穷举弄出来的 这个问题你不是第一次问了,本论坛上也已经回答过了 本帖最后由 mathematica 于 2019-2-16 09:55 编辑
mathe 发表于 2019-2-16 09:20
这个问题你不是第一次问了,本论坛上也已经回答过了
你肯定记错了,我第一次问
我自己查到了
Lagarias Miller Odlyzko 算法
https://www.zhihu.com/question/24942373
Clear["Global`*"];
n=FactorInteger[]
a=IntegerPart@LogIntegral
b=PrimePi
N[(a-b)/b,10]
193707721
10750500
10749692
0.00007516494426
还是这个对数积分牛 的确,上一次不是你问的 https://bbs.emath.ac.cn/forum.php?mod=viewthread&tid=15604&page=1 mathematica 发表于 2019-2-16 10:21
193707721
10750500
10749692
RiemannR 比 LogIntegral 更好
Plot[{RiemannR, LogIntegral, PrimePi}, {x, 1, 100}]
页:
[1]
2