0

プロジェクトオイラー#10

私は次のコードを使用しています:

import math

def is_prime(num):
    num_sqrt=int(math.sqrt(num))+1
    for i in range(2, num_sqrt):
        if(num%i == 0):
            return False
    return True

prime_sum=3
counter=2

for a in range(5, 2000000, 2):
    if(is_prime(a)):
        counter = counter +1
        print a, counter
        prime_sum=prime_sum+a

print prime_sum

そして私は結果として142913828920

上記のプログラムの出力の最後の10行は次のとおりです。

1999859 148925
1999867 148926
1999871 148927
1999889 148928
1999891 148929
1999957 148930
1999969 148931
1999979 148932
1999993 148933
142913828920

ウェブサイトhttp://www.numberempire.com/primenumbers.phpは、1999993が148933番目の素数であることを確認しています(-> http://www.numberempire.com/primenumbers.php?number=1999993&action=check)。

ここで何が問題になっていますか?

4

2 に答える 2

3

変数をprime_sum誤って初期化しています。最初の2つの素数は2と3なので、5(3ではない)にする必要があります。現代の数学では、1は通常プライムとは見なされません。

于 2012-10-21T19:34:37.840 に答える
1

完全なソリューション(または完全なソリューションの試み)であると称するコードを投稿することは、プロジェクトオイラーの精神に違反します。答えを投稿することは、さらに大きな精神違反です。

私見では。

ジェリー

于 2012-10-22T12:28:42.473 に答える