我刚刚为你的函数odd_primes(N)创建了一个替换,以返回所有小于或等于N的素数的列表(其中有2个似乎没有什么区别)。您的check()函数似乎检查4到N之间的所有整数,如果找到没有找到Goldbach和的值,则返回False。然而,正如其他人指出的,一旦找到一对,它也会立即返回True。所以,当你运行check()时,会发生的情况是从数字4开始,发现它的Goldbach对是(2,2),然后立即通过返回True退出函数,忽略4和N之间的任何其他值
当我将return True替换为print语句并在整个循环之后添加一个`return True:def check(N):
for n in range(4, N+1):
if n % 2 ==0:
g = goldbach(n)
if g == (0,0):
print("No sum found for %d !" % n)
return False
else:
print("%d is equal to %d + %d" % (n, g[0], g[1]))
return True
然后运行check(20)例如,我得到:
^{pr2}$
顺便说一句,如果你只想知道一个给定的偶数是否可以写成两个素数的和,但是你不在乎实际的一对素数是什么,你可以这样做:def goldbach(N):
if N % 2 == 0:
primes = odd_primes(N)
# Generate a list of all the i+j sums where j >= i (skipping
# most duplicates this way), and see if N is among the sums.
sums = [i + j for i in primes for j in primes[primes.index(i):]]
return(N in sums)
else:
print("N must be even.")
return(False)