Python中的哥德巴赫猜想

Python中的哥德巴赫猜想,python,goldbach-conjecture,Python,Goldbach Conjecture,我试图编写一个代码,返回满足给定N的哥德巴赫猜想的一对。该猜想指出,每一个大于4的偶数都可以表示为两个素数的和。该函数返回一个稍微偏离的对,例如,goldbach(34)返回(5,31),而不是正确答案(3,31)。同样地,哥德巴赫(38)回归(11,31)。 你知道我哪里做错了吗?我知道这段代码效率不高,但这是我被要求为我的作业编写代码的方式 def eratosthenes(n): primes = list (range(2, n+1)) for i in primes:

我试图编写一个代码,返回满足给定N的哥德巴赫猜想的一对。该猜想指出,每一个大于4的偶数都可以表示为两个素数的和。该函数返回一个稍微偏离的对,例如,goldbach(34)返回(5,31),而不是正确答案(3,31)。同样地,哥德巴赫(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 
def-eratothenes(n):
素数=列表(范围(2,n+1))
对于素数中的i:
j=2

当i*j满足条件后,在断开循环之前分配
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 

在满足条件后中断循环之前,您正在分配
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 
def-eratothenes(n):
素数=列表(范围(2,n+1))
对于素数中的i:
j=2
当i*j
def eratosthenes(n)时:
素数=列表(范围(2,n+1))
对于素数中的i:
j=2
而i*j
def isPrime(n):
对于范围(2,n)内的i:
如果n%i==0:
返回0
返回1
否=整数(输入(“输入数字:”)
对于范围内的i(3,否):
如果iPrime(i)=1:
对于范围内的l(i,否):
如果iPrime(l)==1:
如果否==(i+l):
打印(i,“+”,l,“=”,否)
def iPrime(n):
对于范围(2,n)内的i:
如果n%i==0:
返回0
返回1
否=整数(输入(“输入数字:”)
对于范围内的i(3,否):
如果iPrime(i)=1:
对于范围内的l(i,否):
如果iPrime(l)==1:
如果否==(i+l):
打印(i,“+”,l,“=”,否)

有没有一个场景能让它真正起作用?@TobiasWilfert我没能找到!有没有一个场景它真的起作用了?@TobiasWilfert我还没找到!