考虑n
,在2n
和n<2^32
之间寻找素数的最快方法是什么。我在谈论Bertrand的假设
答案 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