python - 哥德巴赫猜想在 Python 中最多验证 N
问题描述
我似乎在我的 python 代码中创建了一个无限循环。我的目标是创建一个函数 'check',它使用我之前的 'goldbach' 函数来确认每个大于 4 和输入 N 的偶数都符合哥德巴赫猜想(我知道,这是一个毫无意义的过程,但它是为了我的任务)。我知道我的“goldbach”函数运行良好,并产生一对素数,对于“好”输入,总和为 N,对于“坏”输入,总和为 (0,0)。我希望我的检查函数对所有大于 4 的偶数输入返回 True(因为这些符合猜想),对任何奇数输入返回 False。但是,当我在控制台中尝试检查功能时,我的代码将无法运行,所以出了点问题 - 知道它是什么吗?
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
x = prime[i]
for j in range(len(prime)):
y = prime[j]
result = x + y
if result == N: break
return x, y
def check(N):
for n in range(4, N+1):
if n % 2 ==0:
g = goldbach(n)
if g == (0,0):
return False
else:
return True
解决方案
检查范围中的第一项后,您将立即返回。False
遇到不符合预期的商品需要第一时间退货,True
全部符合预期的最后退货。
如果您只想查看偶数,请2
在range()
函数中使用 stride of 而不是测试每个数字以查看它是偶数还是奇数。
def check(N):
for n in range(4, N+1, 2):
if goldbach(n) == (0, 0):
return False
return True
你不需要while
循环 in goldbach()
。这两个for
循环测试素数的所有组合。如果他们没有找到匹配的配对,则没有理由重新启动它们。
您还可以简化和优化您的循环。内部循环只需要从 开始测试素数x
,因为y < x
在 的早期迭代中已经测试过的素数对x
。
def goldbach(N):
if N % 2 == 0:
prime = odd_primes(N)
for i, x in enumerate(prime):
for y in prime[i:]:
if x + y == N:
return x, y
return 0, 0
但是,我认为您的代码应该仍然可以工作,这表明问题实际上odd_primes()
是没有将所有素数返回到N
.
推荐阅读
- javascript - 扩展运算符函数Graphql?
- mysql - MySQL 8:在 my.cnf 中安装 component_validate_password 得到错误
- arrays - 如何将数组对象输入发送到 Angular 上的 firestore?
- python - TypeError:Python 中的“int”和“NoneType”实例之间不支持“>”
- javascript - 如何将javascript控制台输出显示到alert()中
- python - JiTCDDE 没有给出预期的输出
- entity-framework-core - 如何遍历 Entity Framework Core 中的 dbcontext 所有 dbset 以获取计数?
- python - 为什么类字段将由子类共享?
- c# - publishing asp.net web application using msbuild
- github - how to delete someone else's repo? (not forked)