2017-03-17 4 views
0

私がpowershellでコードを実行した結果は、3つの数字とその後のフリーズです。私は最初の10個の素数のすべてのログを集計しようとしています。プログラムが動作しない

番号が

1.09861228867、 1.60943791243、 1.94591014906

#summing up all the logs of the first 10 primes, excluding 2. 

from math import * # library imports 
import math   # " " 

count = 1      #1-9 gives us 9 primes in total 
numb = 3      #3 is the second prime number. 
logy_of_prime_sum_total = 0  #sum of log of primes starts at zero 
logy = 0      #first value of log is zero 

while count != 10:    #loops 9 times, for a total of 9 primes. 
    for k in range(2,numb): #from 2 up to but not including numb. 
     if numb%k == 0:  #purpose is to skip the else if not prime. 
      break    #break takes us out of the for/else disj. 
    else: 
     logy_of_prime_sum_total = logy+logy_of_prime_sum_total 
     logy = math.log(numb) #when the else activates, we are 
     print(logy)    #dealing with a prime, getting a value  
     numb += 2    #the log of it, incr. numb. by two, 
     count += 1    #because primes have to be odd, 
           #increase the count 
print logy_of_prime_sum_total #print the sum of all the logs after the 
           #while end. 
+0

あなたの 'if'は' else'と一致しません。 'for'ループは 'prime'が3であるので無意味です。範囲は(2、3)半分開いているので、基本的には3になります。あなたはlogy_of_prime_sum_totalに割り当てません。 – user902384

+0

基本的には恐ろしい混乱です。 – user902384

+0

素数を計算するために使用している論理を説明すると、私たちがあなたを手助けするのに役立ちます:) – Shubham

答えて

0

あるあなたが持っている唯一の問題は、numbが複合であることを起こる場合は、numbを増加していないです。 numb += 2をループの最後まで移動してインデントしてください。 numbが複合体、例えば、 9(第四数)あなたはforループを抜け出しと(あなたがいないbreakをすればforループ上elseのみ実行)numbをインクリメントされることはありません:

while count != 10: 
    for k in range(2,numb): #from 2 up to but not including prime. 
     if numb%k == 0: 
      break 
    else: 
     logy_of_prime_sum_total = logy+logy_of_prime_sum_total 
     logy = math.log(numb) 
     print(logy) 
     count += 1 
    numb += 2 

print(logy_of_prime_sum_total) 

出力:

1.0986122886681098 
1.6094379124341003 
1.9459101490553132 
2.3978952727983707 
2.5649493574615367 
2.833213344056216 
2.9444389791664403 
3.1354942159291497 
3.367295829986474 
18.529951519569238 

をBTWあなたは10の番号を取得するためにcount = 0を開始する必要があります、あなただけが9を取得します。

関連する問題