1 回答
TA贡献1854条经验 获得超8个赞
如果必须使用筛法,那么首先:
更改您的筛子以使用n而不是n + 1:
primes = list (range(2, n))
接下来,将您的lemoine功能更改为:
if result == N:
return x, y
而不是当前的方式,你break在哪里result == N。按照您现在的方式,您在再x增加一次后退出该函数,从而导致不正确的结果。(例如,2而不是3在下面的n = 47示例中。
这是一个可以与之比较的工作实现:
def isPrime (n):
if n < 2:
return False
for i in range(2, (int(n ** (1/2)) + 1)):
if n % i == 0:
return False
return True
def lemoine(n):
pairs = {}
# n = p + (2 * q)
for q in range(1, int(n / 2)):
p = n - 2 * q
# Are p and q prime?
if isPrime(p) and isPrime(q):
pairs[p] = q
return pairs
n = 47
pairs = lemoine(n)
for key in pairs:
print('{} is {} + 2 * {}'.format(n, key, pairs[key]))
这给出了输出:
47 is 43 + 2 * 2
47 is 41 + 2 * 3
47 is 37 + 2 * 5
47 is 13 + 2 * 17
添加回答
举报