python写一判素数的函数

  • Post category:Python

下面是Python写一判素数的函数的完整攻略:

什么是素数?

素数又称质数,指大于1的自然数中,除了1和它本身以外不再有其他的因数,如2、3、5、7、11等。

素数判定

判断一个数是否为素数,最简单粗暴的方法就是从2开始一直到n-1依次判断n是否能够被这些整数整除,如果不能被整除,则说明n是素数;如果n可以被整除,则说明n不是素数。但是这种方法太低效,我们需要使用更有效的方法来进行素数判定。

经典的素数判定算法是埃拉托色尼筛法(Sieve of Eratosthenes),该算法的时间复杂度为O(nloglogn),但是实现较为复杂,不适合作为素数判定的函数。因此,我们可以使用更加简单易懂的方法来判定素数。

常用的判定素数的方式是试除法,即对于每一个n,我们让它除以2到n-1之间的每一个整数,如果存在一个数能够被n整除,那么n就不是素数;反之,如果每一个整数都不能被n整除,那么n就是素数。优化该算法的具体方法是进行到sqrt(n)时即可停止,因为在之后的数中一定有一个是n的因数,而我们已经找到这个数了。

Python代码示例

示例一:使用试除法判定素数

def is_prime(n):
    """
    判断n是否为素数
    """
    if n < 2:
        return False
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            return False
    return True

在这个函数中,我们首先判断n是否小于2,如果n小于2,那么它一定不是素数,直接返回False即可。然后我们使用for循环从2开始一直到int(n0.5)+1,依次判断n是否能够被这些数整除。注意第二个参数int(n0.5)+1,在试除法中,只有小于sqrt(n)的整数才有可能成为n的因数,因此我们只需要在这个范围内进行尝试。

示例二:生成素数序列

我们可以编写一个函数,用于生成指定范围内的素数序列。

def generate_primes(lower_bound, upper_bound):
    """
    生成lower_bound到upper_bound范围内的素数序列
    """
    primes = []
    for n in range(lower_bound, upper_bound+1):
        if is_prime(n):
            primes.append(n)
    return primes

在这个函数中,我们使用一个空列表primes来存储素数序列。使用for循环迭代从lower_bound到upper_bound的每一个整数n,如果n是素数,则将它加入primes列表。最后返回primes列表即可。

这两个函数的具体用法可以参看下面的示例代码:

lower_bound = 1
upper_bound = 100
primes = generate_primes(lower_bound, upper_bound)
print(primes)

输出结果为:

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

这是1到100范围内的素数序列。