N以下のすべての素数をリストする最速の方法
これは私が思いつく最高のアルゴリズムです。 def get_primes(n): numbers = set(range(n, 1, -1)) primes = [] while numbers: p = numbers.pop() primes.append(p) numbers.difference_update(set(range(p*2, n+1, p))) return primes >>> timeit.Timer(stmt='get_primes.get_primes(1000000)', setup='import get_primes').timeit(1) 1.1499958793645562 さらに速くできますか? このコードには欠陥があります。numbersは順序付けられていないセットであるnumbers.pop()ため、セットから最小数を削除する保証はありません。それにもかかわらず、それはいくつかの入力番号に対して(少なくとも私にとっては)機能します: >>> sum(get_primes(2000000)) 142913828922L #That's the correct sum of all numbers below 2 million >>> 529 in get_primes(1000) False >>> 529 in …