判断任意数字是否为素数

素数又被称质数Prime number)指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个因数的数)。大于1的自然数若不是素数,则称之为合数

用python实现判断一个数字是否为素数。

第一种方法整除法,通过对数字范围以内的数字进行循环整除,效率很低,数字大的时候耗时,代码实现:

def is_prime(n):
    if n == 2:
        return True
    if n % 2 == 0 or n <= 1:
        return False

    sqr = int(math.sqrt(n)) + 1

    for divisor in range(3, sqr, 2):
        if n % divisor == 0:
            return False
    return True

第二种方法是用算法优化整个逻辑与执行流程,筛选出n以内的所有素数,原理是通过定义一个数组,生成 n*True 个元素,代码实现:

def prime_sieve(n):
    sieve_lst = [True] * n
    sieve_lst[0] = False              # 第一个和第二个不是素数,设为False
    sieve_lst[1] = False          
    for i in range(3, int(math.sqrt(n))+1):
        pointer = i *2                # 对n数字以内的倍数,全部设为False
        while pointer < n:
            sieve_lst[pointer] = False
            pointer += i   
    
    primes = []
    for x in range(n):
        if sieve_lst[x]:
            primes.append(i)
    print primes
    return primes

prime_sieve(33)
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]

此算法来源于 《Hacking Secret Ciphers with Python》一书

原文地址:https://www.cnblogs.com/starsea/p/5639434.html