Python Goldbach猜想算法每次返回一个不正确的元组
我创建了一个函数来查找所有素数的组合,这些组合加起来就是一个给定的数字。它工作得非常好,除了我返回的第二个元组总是关闭之外。代码的结构方式总是返回给定元组的两种变体,例如(5,13)和(13,5),但这个不正确的元组总是单独存在的Python Goldbach猜想算法每次返回一个不正确的元组,python,math,python-3.4,Python,Math,Python 3.4,我创建了一个函数来查找所有素数的组合,这些组合加起来就是一个给定的数字。它工作得非常好,除了我返回的第二个元组总是关闭之外。代码的结构方式总是返回给定元组的两种变体,例如(5,13)和(13,5),但这个不正确的元组总是单独存在的 def goldbach_conj(number): prime_tup_list = [] x, y = 0, 0 result = 0 if not number % 2: prime_list = list_of_
def goldbach_conj(number):
prime_tup_list = []
x, y = 0, 0
result = 0
if not number % 2:
prime_list = list_of_primes(number)
# while result != number:
for i in range(len(prime_list)):
x = prime_list[i]
if result == number:
prime_tup_list.append((x, y))
for j in range(len(prime_list)):
y = prime_list[j]
result = x + y
print("Adding {} and {}.".format(x, y))
print("Result is {}".format(result))
if result == number:
prime_tup_list.append((x, y))
return prime_tup_list
如果我输入56作为我的数字,我将得到以下输出:
[(3, 53), (5, 53), (13, 43), (19, 37), (37, 19), (43, 13), (53, 3)]
36年后,我得到:
[(5, 31), (7, 31), (7, 29), (13, 23), (17, 19), (19, 17), (23, 13), (29, 7), (31, 5)]
直接在第一个
for
循环内的这种情况似乎是导致问题的原因-
if result == number:
prime_tup_list.append((x, y))
当您在第二个for循环中找到一个与数字相等的结果时,您可以将其添加到素数列表中,但如果这是列表中的最后一个素数,则结果不会更改,并且我们退出第二个for
循环(仍然具有相同的结果
)在
循环的第一个的下一次迭代中,取下一个x
值,但在再次计算结果
之前,检查结果
是否等于数字
,如果是,则追加x
(新的x
,而不是用于计算结果
)和y
添加到列表中
如果
条件不确定为什么存在,您可以删除该条件
编辑:
代码-
def goldbach_conj(number):
prime_tup_list = []
x, y = 0, 0
result = 0
if not number % 2:
prime_list = list_of_primes(number)
# while result != number:
for i in range(len(prime_list)):
x = prime_list[i] #if below here is removed.
for j in range(len(prime_list)):
y = prime_list[j]
result = x + y
print("Adding {} and {}.".format(x, y))
print("Result is {}".format(result))
if result == number:
prime_tup_list.append((x, y))
return prime_tup_list
您还可以为
循环编辑第二个上的范围,以避免重复
def g(number):
prime_tup_list = []
x, y = 0, 0
result = 0
if not number % 2:
prime_list = list_of_primes(number)
for i in range(len(prime_list)):
x = prime_list[i]
for j in range(i, len(prime_list)):
y = prime_list[j]
result = x + y
print("Adding {} and {}.".format(x, y))
print("Result is {}".format(result))
if result == number:
prime_tup_list.append((x, y))
return prime_tup_list
输出:
分别为56人和36人
[(3,53)、(13,43)、(19,37)]
[(5,31),(7,29),(13,23),(17,19)]
代码不会运行于数字3
@Brofessor仅适用于大于2
的偶数。如果可以删除,请检查编辑后的代码,您还应该仔细阅读答案,以了解错误所在。好的,谢谢。当我回答时,我还没有看到编辑:)我现在看到,不管结果如何,我都在下一个x后面加上了旧的y。太棒了!我有点困惑到底为什么会这样,但确实如此。编辑:算出:)它阻止算法返回并查看低于当前正在比较的数字的数字。