2011-11-04 63 views
3

我写了一个函数来计算一个数是否为素数,但尝试它可能,它似乎无法给出正确的响应。它还打印正在递增的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 

这是怎么回事错在这里?

+1

素数定义是错误的 – yosukesabai

+2

只是一个侧面说明:有*加载*的方式来优化质数检查,但一个简单的方法是:只检查x的平方根。因此,添加'从数学导入sqrt,floor',然后将您的范围更改为'range(2,floor(sqrt(x)))' – Ord

+1

您的原始逻辑,作为pythonic一行:'def isPrime(x):return x> 1和所有(x%n在xrange(2,x)中的n)' – wim

回答

6

每个数字都可以被1整除,本身。质数是一个自然数,没有正数除数其他比1和它本身。因此,如果您以1,开始for循环,则每个号码x将在第一次迭代中通过条件x % 1 == 0,返回False

要解决它,你需要用2,而不是1开始你的循环另外,作为一个侧面说明,你只需要循环2至sqrt(x),因为如果存在一些q > sqrt(x)划分x,然后还必须有一个号码p = x/q,它也分为xp < sqrt(x)

+1

非常感谢。我现在感到很蠢。 –