我可以使用Eratosthenes的Sieve来计算素数的数量,但这需要我创建一个如此之大的数组,以至于无法创建它。我只是期待找到一种方法或算法来完成任务。名称或参考将用于此目的。我只需要一些方法来完成任务。有了这个方法,我将找出编程部分。请帮助。
答案 0 :(得分:0)
对于你想要的东西,我无法想到比Sieve of Eratosthenes更好的东西,所以这就是我要做的。
Eratosthenes的Sieve只需要检查一个数字的素数除数,直到该数字的平方根,所以你不需要为所有小于10 ^ 14的素数创建一个数组 - 只需素数小于10 ^ 7。
有664,579 primes小于10 ^ 7 - 即使在具有非常适度规格的计算机上,该大小的数组也应该没问题(将它们存储为4字节整数,即~2MB )。
这是一种伪代码方法:
在保持除数素数时你不需要 - 你可以天真地除以每个小于候选词根的数字,但这将更快地记录log(n)。
这是一种非常粗暴的方式,但它确实有效。