在Python中遇到is_prime(x)程序的问题?

时间:2013-08-08 18:05:54

标签: python

我为提出这样一个无用的问题而道歉,但是我在用Python编写一个非常基本的程序来检查一个数字是否为素数时会遇到问题。

这是我的代码:

def is_prime(x):
    if x < 2:
        print ('Please enter a number >= 2.')
    else:
        if x == 2 or x == 3 or x == 5:
            return True
        if x == 4:
            return False
        for num in range (2, int(x/2)):
            if x % num == 0:
                return False
                break
            else:
                return True

但是对于所有奇数都会返回True;不只是主要的。我不明白为什么。如果有人能指出我正确的方向,我将不胜感激! :)

4 个答案:

答案 0 :(得分:2)

您的代码只会检查num % 2并返回TrueFalse,具体取决于结果。因此,它会为所有奇数返回True。如果循环没有遇到return True,您应该return False,请参阅代码。

def is_prime(x):
    if x < 2:
        print ('Please enter a number >= 2.')
    else:
        if x == 2 or x == 3 or x == 5:
            return True
        if x == 4:
            return False
        for num in range (2, int(x/2)):
            if x % num == 0:
                return False
        return True


>>> is_prime(11)
True
>>> is_prime(9)
False

P.S - break之后您不需要return。 :)

答案 1 :(得分:0)

这个代码,你在循环中,防止循环每次运行多次;因此你只能检查2的可分性。这是因为return语句会立即终止整个函数(因此你所拥有的中断也是多余的):

if x % num == 0:
    return False
    break
else:
    return True

你可能想要的是:

for num in range (2, int(x/2)):
    if x % num == 0:
            return False
return True

答案 2 :(得分:0)

检查数字是否为素数(有效)是一项非常艰巨的任务,因为素数并不真正遵循任何不同的模式:http://en.wikipedia.org/wiki/Primality_test

在您的代码中,这是最直观(但效率低下)的算法,一旦您看到该数字不能被2整除,就会错误地返回true。您应该运行整个{{在确定结果为for之前循环1}}。所以你应该做的是true如果对于循环中的某些return false,你会发现num,但是否则,一旦你突破循环,只需返回x % num == 0

编辑:似乎其他人回答的速度比我快一点,所以是的。只要做他们所说的事。

答案 3 :(得分:0)

您的功能可以简化:

def is_prime(x):
    if x==2 or (x>2 and x%2):
        return all(x%n for n in xrange(3, int(x**0.5)+1, 2))
    return False