- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试为弱哥德巴赫猜想编写一个代码,该猜想指出每个大于 5 的奇数都可以表示为三个素数之和。但是,该代码仅返回 (0, 0, 0)。我只需要一个有效的三元组,而不是一系列三元组。有什么想法我哪里出错了吗?我也知道代码并不是最有效的,特别是使用eratosthenes函数来生成我的素数,但这是我被要求编码的形式。
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 weak_goldbach(N):
x, y, z = 0, 0, 0
result = 0
if not N % 2:
prime = eratosthenes(N)
while result != N:
for i in range(len(prime)):
x = prime[i]
if result == N:
break
for j in range(i, len(prime)):
y = prime[j]
result = x + y
if result == N:
break
for k in range (j, len(prime)):
z = prime[k]
result = x + y + z
if result == N:break
return x, y, z
最佳答案
您的代码存在一些问题,但第一个也是失败的原因是,对于奇数,not N % 2 始终评估为 false,跳过循环并返回初始值您设置的 x、y 和 z 值。
也存在逻辑问题;当 x+y+z == N 时,您的代码会在最内层循环中中断,然后当正确设置 result 时,外层循环会中断,但仅在更改 x 或 y 之后!这意味着即使您解决了第一个问题,您的代码也始终会返回错误的结果。
首先,您根本不需要复杂的中断逻辑!当您第一次发现它的总和为 N 时,您可以直接返回 x, y, z。
其次,中间循环中不需要 result=x+y 代码,因为它与弱哥德巴赫猜想无关,而且永远不会成立。
第三,外部的 while 循环完全没有用。它什么都不做,除了在内部循环由于某种原因没有找到结果时创建一个无限循环之外。
最好减少嵌套;因此,确保它是大于 5 的奇数的条件应该为负数,如果不成立则应返回异常。这样函数体就不会嵌套在条件中,这使得它更具可读性。
def weak_goldbach(N):
x, y, z = 0, 0, 0
result = 0
if not N % 2 or N < 7:
raise Exception("Bad input - must be odd number greater than 5.")
prime = eratosthenes(N)
for i in range(len(prime)):
x = prime[i]
for j in range(i, len(prime)):
y = prime[j]
for k in range (j, len(prime)):
z = prime[k]
if x+y+z == N:
return x, y, z
raise Exception("Looks like %d is the exception to the weak Goldbach conjecture!" % N)
关于python - python 中的弱哥德巴赫猜想,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53816521/
我是操作系统新手,我正在尝试执行下面提到的以下命令,但无法解决它不起作用的原因。 我正在尝试执行命令 ls -l | grep D|grep De 这是我的代码 - #include #include
我是一名优秀的程序员,十分优秀!