首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何打印数组的两个元素和这些元素的后续和?(Goldbachs Primes问题)

如何打印数组的两个元素和这些元素的后续和?(Goldbachs Primes问题)
EN

Stack Overflow用户
提问于 2019-02-03 12:04:21
回答 1查看 169关注 0票数 0

我正试图解决这个问题: 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:元素级的==比较失败;这将在将来引发一个错误。‘

有人能帮我处理密码吗?

代码语言:javascript
复制
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))                        
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-03 12:40:36

首先,有很多优化可以使代码逻辑更好。找到素数的方法可以改进,您只需要检查数到平方根n,就可以验证n是否是素数。此外,还可以改进Goldbachs猜想的实际验证。

但是,只关注当前代码,如果希望追加值,则应该坚持使用列表,而要停止代码,则需要使用某种哈克来使用换-否则语法停止嵌套循环。此外,您还可以使用f-字符串来很好地格式化从python 3.6开始的字符串。

代码语言:javascript
复制
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!!")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54502653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档