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。
答案 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):'循环之前返回。也就是说,你需要表达'返回素数'的陈述。