Python 找到前n个素数?

Python 找到前n个素数?,python,math,performance,primes,Python,Math,Performance,Primes,可能重复: 虽然我已经编写了一个函数来查找n下的所有素数(primes(10)->[2,3,5,7]),但我正在努力找到一种快速查找前n个素数的方法。做这件事最快的方法是什么?我不知道是不是最快,但看起来不错 编辑 正如其他答案所建议的,你可以使用素数定理的基本事实。或者你可以学习基本的代数几何,并使用椭圆曲线素性测试。你想要的 使用该函数来估计您希望看到的n的值,稍微过冲,然后使用筛子计算到您需要的点。从估计值g(n)=n log n+n log n*开始,它估计n>5的第n个素数的大小 然

可能重复:


虽然我已经编写了一个函数来查找n下的所有素数(
primes(10)->[2,3,5,7]
),但我正在努力找到一种快速查找前n个素数的方法。做这件事最快的方法是什么?

我不知道是不是最快,但看起来不错

编辑

正如其他答案所建议的,你可以使用素数定理的基本事实。或者你可以学习基本的代数几何,并使用椭圆曲线素性测试。

你想要的


使用该函数来估计您希望看到的n的值,稍微过冲,然后使用筛子计算到您需要的点。

从估计值
g(n)=n log n+n log n
*开始,它估计n>5的第n个素数的大小

然后对这个估计进行筛选。
g(n)
给出了一个高估值,这是可以的,因为我们可以简单地丢弃生成的大于所需n的额外素数

然后在“./P>”中考虑答案。

如果你关心代码的实际运行时间(而不是算法的时间复杂度的数量级),考虑使用一个使用NUMPY的解决方案(而不是一个纯Python解决方案)。


*当我写
log
时,我指的是自然对数。

利用质数在2和3之后的形式为6n+1或6n-1的事实,使用擦除时间筛选。这将提高程序的速度,根据第n个质数p\n满足

p_n 对于n>=6


因此,如果您使用大于上面右边的下一个整数运行当前函数(或,例如,其他答案中提到的一个筛子),您肯定会找到第n个素数。

这是另一种查找n下素数的方法。我在n个函数中看到了大约172个素数,我正在寻找前n个素数的代码。记忆可能是最快的。;)不重复:OP需要前n个素数,而不是n以下的所有素数。重复:在“查找前n个素数”和“查找n以下的所有素数”之间几乎没有区别。任何能找到k以下所有素数的算法都可以很容易地修改为继续增加k,直到找到n个素数。这不是重复,它提出的问题与建议的重复不同。前n个素数与n.+1以下的所有素数相比,有助于获得正确的名称,-1用于提出相同(不正确)的解决方案。@ChrisLutz我想我应该在编辑前给出一个答案,以充实它,但在我看来(编辑后)使用π来估计合理的超调,然后在到达那里的路上提前停止似乎是合理的。我得看看重复的答案是什么意思在这个问题上我没有投任何反对票。我的数学结果为零,这让我很恼火。@ChrisLutz,我明白;过去我曾多次发表过类似的“反对票”评论。:)我不确定该怎么处理这个。。。我的代码
primes(int(pi*n))[:n]
仅返回以下12个数字的正确素数。您的代码应运行
primes(g(n))
。我不知道你是不是这个意思。我的回答中的
g(n)
函数出错,请使用新函数再试一次。谢谢,终于可以正常工作了