首页 > 解决方案 > Python中的哥德巴赫猜想

问题描述

我试图编写一个代码,该代码返回一对满足给定 N 的哥德巴赫猜想的一对。猜想指出,每个大于 4 的偶数都可以表示为两个素数之和。该函数返回稍微偏离的一对,例如,goldbach(34) 返回 (5, 31) 而不是正确答案 (3, 31)。类似地,goldbach(38) 返回 (11, 31)。有什么想法我在这里出错了吗?我知道这段代码效率不高,但这是我被要求为我的作业编写代码的方式。

def eratosthenes(n):
    primes = list (range(2, n+1))
    for i in primes:
        j=2
        while i*j<= primes[-1]:
            if i*j in primes:
                primes.remove(i*j)
            j=j+1
    return primes

def odd_primes(N):
    oddprimes = eratosthenes(N)
    oddprimes.remove(2)
    return(oddprimes)

def goldbach(N):
    x, y = 0, 0
    result = 0
    if N % 2 == 0:
        prime = odd_primes(N)
        while result != N:
            for i in range(len(prime)):
                x = prime[i]
                if result == N: break
                for j in range(len(prime)):
                    y = prime[j]
                    result = x + y
                    if result == N: break 
    return x, y 

标签: pythongoldbach-conjecture

解决方案


x一旦满足条件,您就在中断循环之前进行分配。break只需在第一个for循环中反转您的行:

def goldbach(N):
    x, y = 0, 0
    result = 0
    if N % 2 == 0:
        prime = odd_primes(N)
        while result != N:
            for i in range(len(prime)):
                if result == N: break  # this line first
                x = prime[i]   # this line after
                for j in range(len(prime)):
                    y = prime[j]
                    result = x + y
                    if result == N: break 
    return x, y 

推荐阅读