2016-06-24 16 views
0

私はちょうどプログラムの仕方を学び始めました。そして、n番目の素数を見つけるプログラムを作ろうとしていました。そして私はそれをやった。しかし、それは非常に長い時間がかかります。それをより速くする方法はありますか?ここで私が使用したコードは(それは本当に基本的です)です:n番目の素数をより速く見つけるには?

def prime_finder(nth1): 
    s = 1 
    n = 0 
    while n < nth1: 
     s += 1 
     for x in range(2,s): 
      if s % x == 0: 
      break 
     else: 
      n += 1 

    return s 

print prime_finder(31337) 
+0

1つの方法は、* n *番目の既存の相対的にタイトな上限のいくつかを用いて、[プライムシーブ]アルゴリズム(https://en.wikipedia.org/wiki/Generating_primes#Prime_sieves)を適応させることです素数。より簡単な修正の点では、2からsqrtまでの除算をチェックする必要があります。これは少し速くなる可能性があります:) – oldrinb

+0

これはPythonについてのことではなく、[アルゴリズム](https://en.wikipedia。 org/wiki/Algorithm)。たとえば、[Sag of Eratosthenes](https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes)を見てみてください。そこには擬似コードがあり、そこから始めるべきです。また、より多くを見つけるために「素数を見つける」ためのGoogleだけでもできます。 – rkersh

答えて

0

あなたが代わりに要因を見つけること range(2,s)を反復することによってそれをスピードアップすることができ数がその平方未満のものを分割しない場合は、 range(2,int(math.sqrt(s))) を試してみてください根、それは素数でなければならない。

は、同様に import math

に覚えておいてください。

関連する問題