我试图编写一个代码,以返回满足给定N的哥德巴赫猜想的一对。该猜想指出,大于4的每个偶数都可以表示为两个质数之和。该函数返回一对稍微偏离的一对,例如,goldbach(34)返回(5,31)而不是正确答案(3,31)。同样,goldbach(38)返回(11,31)。
有什么想法我在这里出错吗?我知道这段代码效率不高,但是这是我被要求编写代码进行作业的方式。
def eratosthenes(n):
primes = list (range(2, n+1))
for i in primes:
j=2
while i*j<= primes[-1]:
if i*j in primes:
primes.remove(i*j)
j=j+1
return primes
def odd_primes(N):
oddprimes = eratosthenes(N)
oddprimes.remove(2)
return(oddprimes)
def goldbach(N):
x, y = 0, 0
result = 0
if N % 2 == 0:
prime = odd_primes(N)
while result != N:
for i in range(len(prime)):
x = prime[i]
if result == N: break
for j in range(len(prime)):
y = prime[j]
result = x + y
if result == N: break
return x, y
最佳答案
一旦满足条件,就在中断循环之前分配x
。只需在第一个break
循环中反转for
行:
def goldbach(N):
x, y = 0, 0
result = 0
if N % 2 == 0:
prime = odd_primes(N)
while result != N:
for i in range(len(prime)):
if result == N: break # this line first
x = prime[i] # this line after
for j in range(len(prime)):
y = prime[j]
result = x + y
if result == N: break
return x, y
关于python - Python中的哥德巴赫猜想,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53818194/