mathematica 发表于 2019-2-15 16:40:46

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次,找到这个结果,要是有现成的逆函数就好了

mathematica 发表于 2019-2-15 16:42:12

关于第n个素数的近似公式见维基百科
https://en.wikipedia.org/wiki/Prime_number_theorem

mathe 发表于 2019-2-15 16:59:35

你要的就是素数计数函数,大名鼎鼎的$pi(x)$, https://en.wikipedia.org/wiki/Prime-counting_function

lsr314 发表于 2019-2-15 17:03:16

不大于x的素数个数 PrimePi

mathematica 发表于 2019-2-16 08:43:36

lsr314 发表于 2019-2-15 17:03
不大于x的素数个数 PrimePi

但是我感觉这个计数函数有什么快速的计算方法,mathematica一下子就算出来了,不像是穷举弄出来的

mathe 发表于 2019-2-16 09:20:48

这个问题你不是第一次问了,本论坛上也已经回答过了

mathematica 发表于 2019-2-16 09:52:05

本帖最后由 mathematica 于 2019-2-16 09:55 编辑

mathe 发表于 2019-2-16 09:20
这个问题你不是第一次问了,本论坛上也已经回答过了

你肯定记错了,我第一次问
我自己查到了
Lagarias Miller Odlyzko 算法


https://www.zhihu.com/question/24942373

mathematica 发表于 2019-2-16 10:21:52


Clear["Global`*"];
n=FactorInteger[]
a=IntegerPart@LogIntegral
b=PrimePi
N[(a-b)/b,10]


193707721
10750500
10749692
0.00007516494426
还是这个对数积分牛

mathe 发表于 2019-2-16 12:26:34

的确,上一次不是你问的 https://bbs.emath.ac.cn/forum.php?mod=viewthread&tid=15604&page=1

dlpg070 发表于 2019-2-17 18:03:18

mathematica 发表于 2019-2-16 10:21
193707721
10750500
10749692


RiemannR 比 LogIntegral 更好
Plot[{RiemannR, LogIntegral, PrimePi}, {x, 1, 100}]
页: [1] 2
查看完整版本: Prime函数的逆函数是什么函数?