我有以下代碼,其中eratosthenes(N)
返回從1到N的素數數組。我想要做的是從此列表中刪除包含數字0,2的任何數字,4,5,6,8。我的代碼看起來效率很低並且錯誤,因爲它需要大約20秒(eratosthenes(N)
是瞬時的)才能達到10萬,並且不會刪除我想要的所有數字。是否有更好的,可擴展的解決方案來解決這個問題?搜索特定數字的大數字列表的效率
N = 1_000_000
primes = eratosthenes(N)
primes.each do |num|
if ["0", "2", "4", "5", "6", "8"].any? { |digit| num.to_s.include?(digit) }
primes.delete(num)
end
end
「含有數字0,2,4,5,6,8」 - 我敢肯定這是AW rong方法來提高Eratosthenes的篩選效率。你想跳過_last_數字就是其中之一的數字,不是嗎? –
另外,不要改變你當前正在迭代的數組。這應該解釋爲「不會刪除我想要的所有數字」 –
刪除0,2,4,5,6,8的原因與我最初搜索素數時分開。我已經有了我的素數組,我想進一步挑選。第二點是適當注意的。 –