Skip to main content
 首页 » 编程设计

python之Python 中的哥德巴赫猜想

2025年05月04日16www_RR

我曾尝试编写一个代码,返回满足给定 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  

请您参考如下方法:

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

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