0
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) 的输出,因为它们是前 2 个相隔 4 个数字的素数,但我得到 (303, 307) 的返回

不知道我做错了什么?

4

2 回答 2

2

表达方式

(value) and (value+g) not in set(notstorage)

检查是否(value)评估为True,并且(value+g) not in set(notstorage)评估为True

它不检查两者是否都(value)(value+g)集合中。

于 2018-01-29T05:24:38.083 回答
1

您需要改用以下语法:

if (value) not in set(notstorage) and (value+g) not in set(notstorage):

于 2018-01-29T05:24:14.117 回答