判断任意数字是否为素数

Posted 星海暗流

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断任意数字是否为素数相关的知识,希望对你有一定的参考价值。

素数又被称质数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》一书

以上是关于判断任意数字是否为素数的主要内容,如果未能解决你的问题,请参考以下文章

C语言 设计并实现一种大素数随机生成方法; 实现一种快速判定任意一个大数是不是是素数方法 跪求啊

27、写一个函数,判断某一个四位数是否玫瑰花数 用C语言写

C语言习题如何判断一个数字是否为素数(质数)?

经典算法之判断一个整数是否为素数

判断任意一个整数是3又是5的倍数 c语言

C++判断素数的代码