我写了一个函数来计算一个数字是否为素数,但尝试它可能,它似乎无法给出正确的响应。它还会打印正在递增的n值。这是函数的代码(顺便说一下,在Python中):
def isPrime(x):
for n in range(1, x):
print n
if x % n == 0:
return False
return True
如果我输入
isPrime(17)
函数返回
1
False
这里出了什么问题?
答案 0 :(得分:6)
每个数字都可以被1整除。素数是一个自然数,没有正数除数其他而不是1和它本身。因此,如果您使用1启动for循环,每个数字x
将在第一次迭代中传递条件x % 1 == 0
,并返回False
。
要修复它,你需要以2而不是1开始循环。另外,作为旁注,你只需要从2循环到sqrt(x)
,因为如果存在数字{{1除了q > sqrt(x)
之外,还必须有一个数字x
,它还会将p = x / q
和x
分开。