我的素数编号有什么问题?

时间:2013-10-14 18:33:37

标签: python python-3.x

def is_divisible(n, primes):
    for i in range(1, len(primes)):
        if n % primes[i] == 0:
            return True
    return False
primes = []
def find_primes(N):
    for j in range(1, N):
        if is_divisible(j, primes) == False:
            primes.append(j)
        return primes
print(find_primes(200))

它应该判断一个数字是否为素数。只打印1。

5 个答案:

答案 0 :(得分:2)

我认为你的问题是return语句的缩进。这是您修改的代码:

def is_divisible(n, primes):
    for i in range(0, len(primes)):
        if n % primes[i] == 0:
            return True
    return False

def find_primes(N):
    primes = []
    for j in range(2, N):
        if is_divisible(j, primes) == False:
            primes.append(j)
    return primes

如果你不需要,也要避免使用全局变量。 find_primes不需要访问它可以在本地声明它的全局素数列表。另外,请注意find_primes中从2开始的范围,因为每个数字都可以被1整除。此外,无效也很重要。在两个函数中,在返回输出(在find_primes中)或默认(在is_divisible中)

之前,不会遍历整个循环

答案 1 :(得分:1)

所有数字都可以被1整除。当你的程序检查1是否为素数时,它确定是,所以它将它附加到数组。然后,当它检查下一个数字2是否可以被任何现有的素数整除时,它表示是,它可以被1整除,因此它不是素数等等。

答案 2 :(得分:1)

您添加的第一个数字是1,每个数字都可以被1整除,因此is_divisible(x,1)== True,除了1之外没有数字附加到素数列表。

答案 3 :(得分:0)

您的return primes行位于for循环中,这意味着它只检查第一个数字(即1),并返回该单个计算的结果。

您的程序应该在查看所有数字后返回素数,而不仅仅是在第一个数字。

答案 4 :(得分:0)

除了上面的注释(你的程序应该从2开始),你不想在你完成'for j in range((2),N):'循环之前返回。也就是说,你需要表达'返回素数'的陈述。