python实现判断是否为素数的函数

  • Post category:Python

下面是详细讲解Python实现判断是否为素数的函数的完整攻略:

概述

素数是指只能被1和本身整除的数,比如2、3、5、7、11等。求一个数是否是素数的问题在计算机程序中常常会遇到。Python 中实现判断一个数是否为素数的函数有很多方法,我们将介绍其中的两种方法。

方法一:暴力枚举法

我们可以对待判断的数从2到它的平方根进行依次尝试是否可以整除它。如果存在一个数可以整除它,那么它就不是素数,否则就是素数。

import math

def is_prime_1(n):
    if n < 2:
        return False
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True

在上面的代码中,我们先判断了小于2的数不是素数。然后对于其他的数字,从2到它的平方根依次尝试是否可以整除它,如果可以整除,返回False;如果循环内的所有值都无法整除,则说明它是素数,返回True。

方法二:筛法

筛法是一种常见的判断质数的方法。常见的筛法包括埃氏筛法、欧拉筛法等。以埃氏筛法为例,我们先将待判断的范围上的所有数标记为素数,然后从2开始,将2的倍数标记为非素数,再从3开始将3的倍数标记为非素数,以此类推,直到所有小于待判断数的数都被标记完毕,剩下的数就是素数。

def is_prime_2(n):
    if n < 2:
        return False
    primes = [True] * (n + 1)
    primes[0], primes[1] = False, False
    for i in range(2, int(math.sqrt(n)) + 1):
        if primes[i]:
            for j in range(i * i, n + 1, i):
                primes[j] = False
    return primes[n]

在上面代码中,我们首先创建了一个长度为n+1的列表primes,用来标记这些数是否是素数,然后初始化所有大于等于2的数都为素数,通过枚举2到sqrt(n)的数,找到素数i的所有倍数,将它们标记为非素数,最后判断待判断的数是否是素数。

总结

方法一采用了直接枚举n的方法,时间复杂度为O(sqrt(n)),如果要判断很多个数是否是素数,那么就不能采用这种方法;方法二是用来判断小范围内的素数的,它将时间复杂度降到了 O(nloglogn),因此适合大量判断素数的情况。

以上就是Python实现判断是否为素数的函数的完整攻略。