我正在尝试解决这个问题:哥德巴赫猜想
用程序“goldbach.py”证明所有到 1000 的偶数确实可以写成两个素数之和。具体来说:对于每个偶数,还要明确显示(在屏幕上)它可以写成两个素数之和,如下例所示
当然,更重要的是,如果你找到一个不符合哥德巴赫怀疑的数字。确保您的程序在屏幕上清楚地显示这样的发现。答对了!
蟒蛇戈德巴赫.py
16 = ...
18 = 5 + 13
20 = 3 + 17
22 = 5 + 17
24 = ...
进步
到目前为止,我已经创建了一个列表,其中存储了 1000 之前的所有素数,然后我创建了一个列表,其中所有素数的总和为偶数,直到 1000。我知道让它打印的格式3 + 17,但我一直试图让它说 sum(pairs) = prime1 "+" prime2。例如,应该是 3 + 17 = 20。另外,我不知道如何在 1000 之前只有一个素数的总和为偶数的示例。我需要以某种方式打破循环。
因为 sum 函数不起作用,我发现我可以将其转换为“numpy array”,然后使用“accumulate”。我只是无法让它工作,并且知道我收到错误消息'DeprecationWarning:elementwise == comparison failed; 这将在未来引发错误。
有人可以帮我写代码吗?
from itertools import accumulate, islice
from numpy import array
import numpy as np
primes = []
pairs = []
numpy_pairs = np.asarray(pairs)
for num in range (4, 1000):
for j in range (2, num):
if (num % j) == 0:
break
else:
primes.append(num)
#for x in range(2,1000):
# if x in primes:
# print ("Ja, het getal {} komt voor in mijn primes".format(x))
for x in range(2,1000):
if x % 2 == 0:
for prime1 in primes:
for prime2 in primes:
if prime1 + prime2 == x and [prime1, prime2] not in numpy_pairs and [prime2, prime1] not in numpy_pairs:
np.append(numpy_pairs,[prime1,prime2])
results = ("{}+{}={}".format(i, j, k) for i, j in zip(numpy_pairs[0::2],
numpy_pairs[1::2]) for k in accumulate(islice(numpy_pairs,numpy_pairs.stop)))
print('\n'.join(results))