def step(g, m, n):
notstorage=[]
actualvalues =[]
for i in range(m, (n+1)):
for primechecker in range(2,i):
if i % primechecker == 0:
notstorage.append(i)
for value in range(m, (n+1)):
if (value) and (value+g) not in set(notstorage):
actualvalues.append(value)
actualvalues.append(value+g)
break
return(actualvalues)
在上面的代码中,我试图弄清楚哪些数字是素数,并创建一个列表,检查是否有两个素数由一定数量(g)分隔。我有问题,因为由于某种原因,数字303作为素数被返回,因为它显然不是因为它可以被3整除....我不确定为什么代码不是'工作正常吗?
当我输入时:
step(4,300,400)
我期待输出(307,311),因为这是前4个数字的前2个素数但是我得到了(303,307)的回报
不确定我做错了什么?
答案 0 :(得分:2)
表达式
(value) and (value+g) not in set(notstorage)
检查(value)
是否评估为True
,(value+g) not in set(notstorage)
评估为True
。
它不检查(value)
和(value+g)
是否都不在集合中。
答案 1 :(得分:1)
您需要使用以下语法:
if (value) not in set(notstorage) and (value+g) not in set(notstorage):