我想我會創建自己的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