在n和2n之间找到素数的最快方法是什么

时间:2017-04-21 18:31:09

标签: algorithm math

考虑n,在2nn<2^32之间寻找素数的最快方法是什么。我在谈论Bertrand的假设

1 个答案:

答案 0 :(得分:2)

最快的方法可能是预先计算和存储大小为2^32的1维数组,其中索引n的值是n和{之间所需的素数。 {1}}。当然,这可能是对记忆的过度使用,但它可能是最快的。

使用更少内存的稍微慢一点的方法是预先计算并存储所有&#34; Bertrand primes&#34;的列表,其中第一个元素是第一个 素数和第一个之后的每个元素是最大素数 不到前一个元素的两倍。您可以使用该列表的二进制搜索来快速查找所需的素数。如果您需要2n,则需要该列表中的最后一个素数高于1 < n < 2^32才能捕获所有此类2^32。这需要一个只有34个素数的列表,非常可行。顺便说一句,如果你想这样做到n,你只需要66个素数。

这是用于实现该算法的Python 3.5代码。它在标准库中使用二进制搜索功能。 Bertrand素数列表是通过另一个简单的Python例程找到的,尽管它也可以在The Online Encyclopedia of Integer Sequences中找到,序列号A006992。

2^64