0
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))

It should tell if a number is prime. And just prints 1.

4

5 回答 5

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 中)之前,您不会遍历整个循环

于 2013-10-14T18:40:08.850 回答
1

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

于 2013-10-14T18:38:02.983 回答
1

您添加的第一个数字是 1,每个数字都可以被 1 整除,因此 is_divisible(x,1)== True 并且除 1 之外的任何数字都不会附加到素数列表中。

于 2013-10-14T18:39:03.523 回答
0

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

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

于 2013-10-14T18:40:08.773 回答
0

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

于 2013-10-14T18:42:26.093 回答