我为PE #46写了一个解决方案,给出了两个答案:57(错误)和5777(正确)。而且我真的很想找出原因!我知道这不是最有效的代码,但是如果我能理解这一点,我可以努力使其更快。我的is_prime()
函数是我为#7编写的函数,用于解决其他一些问题,所以我知道(嗯,我有信心;))问题不存在,但我将其包括在此处为了完整性。
from math import sqrt
def is_prime(x):
if x % 2 == 0:
return x == 2
if x % 3 == 0:
return x == 3
step = 4
m = int(sqrt(x)) + 1
i = 5
while i < m:
if x % i == 0:
return False
step = 6 - step
i += step
return True
def is_composite(n):
for x in range(2, n):
for y in range(x, n):
if x * y == n:
return True
return False
def test(n):
for p in range(3, n):
if is_prime(p):
for t in range(1, p // 2):
if p + (2 * t**2) == n:
return True
return False
# currently this gives 57 (wrong) and also 5777 (right)
i = 33
while True:
if is_composite(i):
if not test(i):
print(i)
i += 2
有什么想法吗?
编辑:这是上面链接中的问题的全文:
克里斯蒂安·戈德巴赫(Christian Goldbach)提出,每个奇数复合数字都可以写为素数和平方的两倍之和。
9 = 7 + 2×1 ^ 2
15 = 7 + 2×2 ^ 2
21 = 3 + 2×3 ^ 2
25 = 7 + 2×3 ^ 2
27 = 19 + 2×2 ^ 2
33 = 31 + 2×1 ^ 2
事实证明该猜想是错误的。
不能写为素数和平方的两倍的最小奇数复合物是什么?