0

私はPythonが初めてで、最近Javaでプログラミングしただけです。私はPythonで1000番目の素数を出力する基本的なプログラムを書いています.

import math

n=2 
location =0

while location < 999 :      
   if location == 998 :
      print n
    n=n+1
    srn = math.sqrt(n)
    srn = int(srn)
    while  srn > 1 :
        if  n % srn == 0 :
            break
        elif srn==2 and n%srn != 0 :
            location = location+1
        srn = srn-1

版画

7919
7920
7921
7922
7923
7924
7925
7926

しかし

while location < 999 :
   if location == 998 :
       print n
        break
    n=n+1
    srn = math.sqrt(n)
    srn = int(srn)
    while  srn > 1 :
        if  n % srn == 0 :
            break
        elif srn==2 and n%srn != 0 :
            location = location+1
        srn = srn-1

版画

7919

なぜこれが起こっているのか誰にも教えてもらえますか?また、これを修正しようとしたときに、シェルがこれを一度しか出力しないことがわかりました。コードをコピーすると、変更したかどうかに関係なく、何も出力されません。コードを変更するたびに、シェルを再起動する必要がありました。

4

2 に答える 2

2

最初のケースでは、次の素数が見つかるまで印刷しています。whileループで継続中です。location == 998は true であるため、数字を出力します。次に、次の素数location < 999が false に解決され、whileループが完了します。

break素数を見つけたときにコードが while ループを離れるようにする必要があります。

印刷をループの外に移動したくない場合はbreak、while 条件を 1 減らします。

while location < 998 :
    n=n+1
    srn = math.sqrt(n)
    srn = int(srn)
    while  srn > 1 :
        if  n % srn == 0 :
            break
        elif srn==2 and n%srn != 0 :
            location = location+1
        srn = srn-1

print n
于 2013-05-30T21:19:25.213 に答える
1

その休憩は絶対に必要です。あなたのコードは、最初の例で 1000 番目と 1001 番目の素数の間のすべてを出力しています。Print は終了しないため、場所が 998 である間にテストするすべての数値を印刷するようにコードに指示していますが、実際には場所が 999 に達するまで実行を停止しません。

于 2013-05-30T21:19:11.837 に答える