python - 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
解决方案
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
推荐阅读
- c++ - 从多个线程修改 unordered_map 是否安全?
- search - SharePoint 联机搜索筛选器
- reactjs - 选择 MUI 后文本字段位置向上移动?
- python - 使用 ctypes 从 Python 调用带有参数的 C++ 方法会导致“不知道如何转换参数”错误
- django - Django Channels - 只为一个端点找不到 URL
- arrays - 数组未从循环更新
- c++ - C ++树数据结构与字符串的访问冲突
- javascript - 混淆或损坏的像素(谷歌地球引擎)
- spring-boot - STS4 如何在 Spring Tools Suite 4 中运行代码覆盖率?
- javascript - 我希望图像在我将鼠标悬停在单词上时显示并在鼠标移出时隐藏