問題が発生したときに私はProject Eulerで問題7を実行していました。私のコードは完成まで長い間かかっていました。ここに私のコードです。プライム検索のプロセスをスピードアップするには?
def Problem7():
num = 0
p = 0
while p < 10002 :
prime = True
for i in range(2,num):
if (num%i==0):
prime = False
if prime:
print(num)
p = p + 1
num = num + 1
Problem7()
どうすれば速くできますか?別の方法がありますか?
これはpython2.xまたはpython3.xですか? python2.xの場合、すばやく最適化されるのは、 'range'から' xrange'に切り替えることです。 – mgilson
この実装にはあまり意味がないいくつかのことがあります:(1)除数を探すときは、テストしている番号の平方根で止めることができます。それより大きいものが除数である場合、対応するより小さな除数が存在しなければなりません。 (2)除数が見つかるとすぐに、ループを終了します(つまり、「break」)。なぜあなたはそれを見つけたら何かを探し続けるのですか? (3)除数としてテストする唯一の偶数は2です。その後、すべての偶数をスキップできます。他の速度の改善も可能ですが、私が挙げたものはまったく些細なものです。 –
高速化するには、[Sieve of Eratosthenes](https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes)などのより効率的なアルゴリズムを使用します。大小の素数が非常に長い時間がかかる前に、すべての個数ですべての個数を割ります。 –