如何打印一个数组,这些元素的总和随后的两个元素? (Goldbachs素数问题)

问题描述 投票:0回答:1

我试图解决这个问题:哥德巴赫猜想

显示与程序“goldbach.py​​”所有偶数高达1000的确可以写成两个素数之和。具体做法是:对于每个偶数,也明确地显示(在屏幕上),它可以写为两个素数的总和,如在下面的例子

更重要的是,当然,如果你发现了一些不符合哥德巴赫的怀疑。确保程序中可以清晰地显示在屏幕上这样的发现。答对了!

python goldbach.py

16 = ...

18 = 5 + 13

20 = 3 + 17

22 = 5 + 17

24 = ...

进展

到目前为止,我已经创建,所有的素数,直到1000存储一个列表,然后我创建的所有素数,其总和为偶数,直到1000组合我知道的格式将它打印列表3 + 17,但我被困在试图把它说总和(对)= prime1“+” prime2。应为3 + 17 = 20例如。另外,我不知道怎么只有1一对素数谁的总和的例子是偶数,直到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))                        
python list numpy primes goldbach-conjecture
1个回答
0
投票

首先第一件事情,也有很多的优化,你可以做,使代码逻辑更好。你发现的素数可提高的方式,你只需要检查数字高达平方根n以验证n是一个素数。而且,Goldbachs猜想实际验证可也得到了改善。 然而,仅仅着眼于当前的代码,你应该坚持,如果你要追加值使用列表,并停止你需要使用一种黑客使用for-else语法来停止嵌套循环的代码。此外,您还可以使用F-字符串从蟒蛇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!!")
© www.soinside.com 2019 - 2024. All rights reserved.