2017-01-30 6 views
-1

数字のリストで素数を見つけるためのプログラムを書いたので、書式設定とすべてを練習します。ここに私のコードはあります:なぜ 'while'はPythonでプログラムを長く実行させるのですか

from math import * 
#Defining range to be checked 
a = range(1,10) 
#Opening empty list 
b = [] 
#Wilsons method for primes 
for n in a: 
    if ((factorial(n-1))+1)%n == 0: 
     b.append(n) 

このコードは、少なくともこの使用段階で問題なく実行されます。しかし、while文(以下を参照)を含めると、かなり遅くなります。

from math import * 
#Defining range to be checked 
a = range(1,10) 
#Opening empty list 
b = [] 
#Wilson't method for primes 
for n in a: 
    while n>1: 
     if ((factorial(n-1))+1)%n == 0: 
      b.append(n) 

誰もがそのようになる理由を説明できますか?

n.b:素数を見つけるより効率的な方法があることを知っています。私は自分のコードを改良しても構いませんが、書式化とすべてを練習しています。

編集:不適切なシンボルではなく、より小さいシンボルの誤った追加。修正されました。

+0

:あなたはif文を使用して、N = 1を含むことを主張した場合の可能な回避策です'factorial(...')を計算することは決してありません。そして、 'b 'に何も追加しなかったので、' b [1] 'の' IndexError'を発生させてください。 – TigerhawkT3

+2

'n <1:'は 'False' 'a 'の範囲は1から10までです。コードは動作しません!本当ですか?それがTrueだった場合、無限ループになります。 –

+1

whileループは必要ありません。 –

答えて

0

としてはnの値が内でごwhile -loopを変更しないようにコードが無限ループになりますいくつかの人々によって指摘しました。

おそらく最初にwhileループを探しているわけではありません。最初の反復(n = 1)なしでループを使用するだけで十分です。 N 'は、したがって、決して満足し `N <1' '1'で始まり、`ように、第2のコードは、はるかに高速である必要があり

a=range(1,10) 
b=[] 
for n in a: 
    if n>1: 
     if ((factorial(n-1))+1)%n == 0: 
      b.append(n) 
関連する問題