プロジェクトオイラーの問題27(https://projecteuler.net/problem=27)について質問しています。私は動作しないか、または十分に速く動作しないコードを書いています。プログラミングに慣れておらず、エラーの意味を完全に理解していません。二次的素数
とにかく、どの整数が$ a、b $と$ | a |、| b | < 1000 $は$ n^2 + an + b $に続き、$ n = 0 $で始まる連続する素数の最大集合を生成します。まず、$ n = 0 $項を素数にしてチェーンを始めるためには、$ b $自体が素数でなければならないことに気づく。私は、可能なすべての素数をbにループし、各整数$ -1000 < < 1000 $をチェックし、生成された連続する素数の連鎖の長さを測定するコードを書いた。私はそれを以下に含めました:
n=int(input("Set a bound for range of a and b: "))
def is_prime(n):
if n==1:
return False
elif n==2 or n==3:
return True
elif (n % 2 == 0) or (n % 3 == 0):
return False
elif all(n % i != 0 for i in range(2, ceil(n**0.5+1))):
return True
else:
return False
def seive(n):
primes=[]
for i in range(n):
if is_prime(i)==True:
primes.append(i)
for j in primes: #j can't be allowed to be negative since when m=0 (the first term), we must have m**2+k*m+j prime. Therefore j must be chosen from primes
for k in range(-n,n,1):
chain=[]
for m in range(0,n):
while is_prime(m**2+k*m+j) == True and m**2+k*m+j>0:
chain.append(m**2 + k*m + j)
details = [j,k,len(chain)]
return details
print(seive(n))
誰かが私が間違っていたことを説明し、それを働かせるヒントを教えてください。ありがとう!
これはどの言語で書かれていますか?あなたは何を得ているのですか? –
オイラーは、2つの係数「a」と「b」を求めます。これらの2つの変数名を使用すると、コードを理解するのに役立ちます。次に、質問をもう一度読み、実際にあなたに求めていることを非常に慎重にチェックします。 – rossum