我想计算一个数字下方的素数。如何有效地完成这项工作。
我使用了Eratosthenes的Sieve,但由于我的数字在10 ^ 20
范围内,因此失败了还有其他任何算法吗?
答案 0 :(得分:7)
随机的20位数字素数的概率约为1/20(source)。如果你想要 x 以下的最大素数,从 x -1开始,对每个数字进行素数测试,一直向下,直到找到素数。以下是我给出的相关答案,并列出了一个高度可靠且极其快速的伪极限测试,应该足够了:
答案 1 :(得分:0)
在n
下面使用筛子的一段足够多的数字,这样你就可以合理地确定它包含一个素数(比如几千个数字)。然后用小素数筛子去除大部分非素数。对剩余的数字使用完整的素性测试(概率,或者20位数的试验除法到根目录可能仍然合理)。
您使用多少小素数进行筛分取决于筛分与运行完整素数测试的相对成本。