题目来自“廖雪峰的官方网站--Python教程”,尝试用filter()函数删除1~100的素数:

def is_prime(n):
    if n <= 1:
        return False
    for s in range(2,n):
        if n % s == 0:
            return False
    return True
    
print filter(is_prime,range(1,101)


素数的定义:

质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数(质数)整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积;而且如果不考虑这些质数在乘积中的顺序,那么写出来的形式是唯一的。最小的质数是2。


基本判断思路:

在一般领域,对正整数n,如果用2到  之间的所有整数去除,均无法整除,则n为质数。


代码中的for循环语句,直接写成

for s in range(2,n)

而不是

for s in range(2,int(sqrt(n))+1)

实际运算中,for循环在到达sqrt(n) % s之前就会被终结掉了,所以写成n还更省事,直接省去import math。