素数的Python算法

时间:2015-01-14 08:47:39

标签: python algorithm

我试图从1到100过滤掉素数,这是代码。然而,事实证明输出中遗漏了许多数字。

def isnot_prime(x):
if x == 1:
    return True
if x == 2:
    return False
for i in range(2, int(x**0.5)+1):
    if x % i == 0:
        return True
    else:
        return False

print filter(isnot_prime, range(1,101))

输出为[1,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44] ,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94 ,96,98,100]。

算法一定有问题。我怎样才能改进它?

谢谢。

2 个答案:

答案 0 :(得分:3)

for修改为:

for i in range(2, int(round(x**0.5 + 1))+1):
    if x % i == 0:
        return True

删除else:并记住int(float)只取整数部分(它不会圆)。

另外,请记住,有更快的算法可以做到这一点。例如,Sieve of Eratosthenes是一种快速而简单的算法。

答案 1 :(得分:0)

我会这样做:

print filter(lambda x: len(['' for y in range(2,x) if x%y==0])==0,range(1,101) )