我想我会创建自己的Sieve算法实现来更快地找到素数。令人惊讶的是,这没有通过一些测试。算法 - 这个Erastothenes解决方案有什么问题
这是我在Ruby中的算法,用于确定数字是否为素数。
def prime?(n)
primes = [2,3,5,7,9,11,13,17]
primes.include?(n) || primes.none? { |p| n % p == 0 }
end
算法如何工作是你把第一对夫妇的素数,我把前8个是安全的。然后,我会去除这些素数的所有倍数,因为它们不可能是素数。
因此,所有其他的数字必须是素
我震惊地发现我的测试失败,我忽略了一些数字。这怎么可能?我完全遵循算法。
任何不在您的有限列表中的质数产品将被您的函数错误地归类为质数。例如,19 * 19或19 * 23或19 * 29 * 37。 –
你没有追随Erastothenes的方法。 –
答案是你没有完全遵循算法。而且,一旦你清除了前8个素数的所有倍数,所有其他数字都是素数,这是不正确的。 https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes#Algorithm_and_varariants – jrochkind