我正试图解决这个问题: Goldbach猜想
用一个程序"goldbach.py“来显示,直到1000的所有偶数都可以写成两个素数之和。具体而言:对于每个偶数,还显式地(在屏幕上)显示它可以写成两个素数之和,如下例所示
当然,更重要的是,如果你发现一个数字不符合戈德巴赫的怀疑。确保您的程序在屏幕上清楚地显示了这样的发现。对啰!
python goldbach.py
16 =.。
18 =5+ 13
20 =3+ 17
22 =5+ 17
24 =.。
Progress
到目前为止,我已经创建了一个列表,其中所有的素数都存储在1000之前,然后我创建了一个列表,其中所有素数的组合都是一个偶数,直到1000。我知道打印3+ 17的格式,但我一直试图让它表示sum(对)= prime1 "+“prime2。例如,应该是3+ 17 = 20。此外,我也不知道如何只有一个例子的一对素数,谁的和是偶数,直到1000。我需要一些方法来打破循环。
由于sum函数不起作用,我发现我可以将它转换为"numpy数组“,然后使用”累积“。我只是无法让它正常工作,并且知道我收到了错误消息'DeprecationWarning:元素级的==比较失败;这将在将来引发一个错误。‘
有人能帮我处理密码吗?
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)) 发布于 2019-02-03 12:40:36
首先,有很多优化可以使代码逻辑更好。找到素数的方法可以改进,您只需要检查数到平方根n,就可以验证n是否是素数。此外,还可以改进Goldbachs猜想的实际验证。
但是,只关注当前代码,如果希望追加值,则应该坚持使用列表,而要停止代码,则需要使用某种哈克来使用换-否则语法停止嵌套循环。此外,您还可以使用f-字符串来很好地格式化从python 3.6开始的字符串。
primes = []
pairs = []
for num in range (2, 1000): #modified. you forgot 2 and 3!
for j in range (2, num):
if (num % j) == 0:
break
else:
primes.append(num)
result = []
for x in range(2,1000):
if x % 2 == 0:
for prime1 in primes:
for prime2 in primes:
if prime1 + prime2 == x:
print(f"{x} = {prime1} + {prime2}")
result.append((prime1, prime2))
break
else: #this is a for-else syntax. enter this block if the for loop did not encounter a break
continue #go to next iteration of the mid-level loop. This prevents the line afterwards from being executed in cases where the inner loop did not "break"
break #break the mid level loop if you reach this line.
else:
print("You have done it! Bingo!!")https://stackoverflow.com/questions/54502653
复制相似问题