我试图编写一个函数,当给定N时,将返回一对符合Lemoine猜想的数字(每个大于5的奇数可以表示为素数和素数的两倍) . 我已经基于以前与Goldbach猜想相关的函数创建了这个代码(这个函数运行正常)并且使用了不同的函数来生成一个最多为N的素数列表,但是我的新代码没有给我正确的结果而且我看不出为什么 - 任何想法?谢谢
def eratosthenes2(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 lemoine(N):
x, y = 0, 0
result = 0
if N % 2:
prime = eratosthenes2(N)
while result != N:
for i in range(len(prime)):
x = prime[i]
if result == N:
break
for j in range(len(prime)):
y = prime[j]
result = 2*x + y
if result == N:
break
return x, y
1 回答
如果你必须使用筛子方法,那么首先:
改变你的筛子使用
n
而不是n + 1
:接下来,将
lemoine
函数更改为:而不是当前的方式,
break
result == N
. 你现在拥有它的方式是,在x
再次增加之后你退出该函数,导致不正确的结果 . (例如2
而不是3
在下面的n = 47
示例中 .这是一个可以与之比较的工作实现:
这给出了输出:
这个例子来自the Wikipedia page .