如何打印数组的两个元素以及这些元素的后续总和? (哥德巴赫素数问题)
How do I print the two elements of an array and the subsequent sum of these elements? (Goldbachs Primes Question)
我正在尝试解决这个问题:哥德巴赫猜想
用程序“goldbach.py”证明1000以内的所有偶数确实可以写成两个质数之和。具体来说:对于每个偶数,还明确(在屏幕上)显示它可以写成两个素数的和,如下例所示
当然更重要的是如果你找到一个不符合哥德巴赫怀疑的数字。确保您的程序在屏幕上清楚地显示这样的发现。宾果!
python goldbach.py
16 = ...
18 = 5 + 13
20 = 3 + 17
22 = 5 + 17
24 = ...
进度
到目前为止,我创建了一个列表,其中存储了直到 1000 的所有素数,然后我创建了一个列表,其中所有和为偶数的素数的组合,直到 1000。我知道格式让它打印 3 + 17,但我一直试图让它说 sum(pairs) = prime1 "+" prime2。例如应该是 3 + 17 = 20。另外,我不知道如何只有一对质数的 1 个示例,其总和在 1000 之前是偶数。我需要以某种方式打破循环。
因为求和函数不起作用,我发现我可以将它转换为“numpy 数组”,然后使用“累加”。我只是无法让它工作,我知道我收到了错误消息 'DeprecationWarning: elementwise == comparison failed; this will raise an error in the future.'
有人可以帮我写代码吗?
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))
首先,您可以做很多优化来使代码逻辑更好。查找素数的方法可以改进,您只需要检查直到平方根 n 的数字即可验证 n 是否为素数。另外,哥德巴赫猜想的实际验证也有待提高。
然而,只关注当前代码,如果你想附加值,你应该坚持使用列表,并且要停止代码,你需要使用一种 hack 来停止使用 for-else 语法的嵌套循环。此外,从 python 3.6 开始,您可以使用 f-strings 很好地格式化字符串。
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!!")
我正在尝试解决这个问题:哥德巴赫猜想
用程序“goldbach.py”证明1000以内的所有偶数确实可以写成两个质数之和。具体来说:对于每个偶数,还明确(在屏幕上)显示它可以写成两个素数的和,如下例所示
当然更重要的是如果你找到一个不符合哥德巴赫怀疑的数字。确保您的程序在屏幕上清楚地显示这样的发现。宾果!
python goldbach.py
16 = ...
18 = 5 + 13
20 = 3 + 17
22 = 5 + 17
24 = ...
进度
到目前为止,我创建了一个列表,其中存储了直到 1000 的所有素数,然后我创建了一个列表,其中所有和为偶数的素数的组合,直到 1000。我知道格式让它打印 3 + 17,但我一直试图让它说 sum(pairs) = prime1 "+" prime2。例如应该是 3 + 17 = 20。另外,我不知道如何只有一对质数的 1 个示例,其总和在 1000 之前是偶数。我需要以某种方式打破循环。
因为求和函数不起作用,我发现我可以将它转换为“numpy 数组”,然后使用“累加”。我只是无法让它工作,我知道我收到了错误消息 'DeprecationWarning: elementwise == comparison failed; this will raise an error in the future.'
有人可以帮我写代码吗?
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))
首先,您可以做很多优化来使代码逻辑更好。查找素数的方法可以改进,您只需要检查直到平方根 n 的数字即可验证 n 是否为素数。另外,哥德巴赫猜想的实际验证也有待提高。
然而,只关注当前代码,如果你想附加值,你应该坚持使用列表,并且要停止代码,你需要使用一种 hack 来停止使用 for-else 语法的嵌套循环。此外,从 python 3.6 开始,您可以使用 f-strings 很好地格式化字符串。
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!!")