私はプロジェクトのユーラー問題を解決しています。numpy.sumが期待値を返さない
私は、私は非常に高速だと思うプライムチェッカー構築した
「200万以下の全ての素数の和で検索] - 改善する方法上の任意のアドバイスがあまりにも素晴らしいことだし。
しかし、私が最後に30分間働いたのは、np.sumが正しい値を返さないということです。ここに私のコードは次のとおりです。
import numpy as np
def isprime(num, primelist):
#Give primelist it's first value if none exist
if len(primelist) == 0:
primelist.append(num)
return True
for primes in primelist:
#Only need to iterate up to square root of num to test primality
if primes <= math.sqrt(num):
#If any number is evenly divisble (remainder = 0) the num is not prime
if num % primes == 0:
#print('non-prime')
return False
break
#If we have iterated through all primes <= sqrt of num, num is prime
else:
primelist.append(num)
#print('prime')
return True
break
lim = 2000000
n = 3
primelist = [2]
while primelist[-1] <= lim:
isprime(n, primelist)
n += 1
if primelist[-1] > lim: primelist = primelist[:-1]
primearray = np.asarray(primelist)
print(np.sum(primearray))
sum = 0
for i in primelist:
sum = sum + i
print(sum)
私はそれはまた、私はnumpyのが返される値をテストするために、元のリストを繰り返してきた作業ではなく、np.sum
されていない可能性がありnp.asarrayと仮定します。
numpyの合計= 1179908154
= 142913828922
100以上の倍の合計を反復します。私は間違ってどこに行ってください!
なぜあなたはnumpyを使用していますか?素数を生成するときに素数を合計するだけです。または 'sum(primelist)'だけです。さて、 'return'ステートメントに続く' break'ステートメントは決して実行されないので、無意味です。 –
リストにはsumで動作しない整数が入力されていますが、単純にasarrayとnumpyで合計するのは簡単でした。あなたは休憩について正しいです:)彼らはコードの以前のバージョンの残り物の少しだった、今それらを削除しました。ありがとう –