📜  python中的素数列表(1)

📅  最后修改于: 2023-12-03 15:04:37.124000             🧑  作者: Mango

Python中的素数列表

素数是只能被1和自身整除的自然数。在Python中,我们可以通过简单的方法来生成素数列表。

方法一:暴力破解法

暴力破解法是最基本的方法,但其速度较慢,不建议使用于大型的素数列表生成。

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

def prime_list(n):
    """生成一个小于等于n的素数列表"""
    prime_list = []
    for i in range(2, n + 1):
        if is_prime(i):
            prime_list.append(i)
    return prime_list

使用方法:

>>> prime_list(20)
[2, 3, 5, 7, 11, 13, 17, 19]
>>> prime_list(50)
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
方法二:埃氏筛法

埃氏筛法是一种时间复杂度较低的算法,它利用了合数的性质,将合数标记起来,避免重复判断。

def prime_list(n):
    """生成一个小于等于n的素数列表"""
    is_prime = [True] * (n+1)
    prime_list = []
    for i in range(2, n+1):
        if is_prime[i]:
            prime_list.append(i)
            # 将 [i*i, n] 区间内 i 的倍数标记为合数
            for j in range(i*i, n+1, i):
                is_prime[j] = False
    return prime_list

使用方法:

>>> prime_list(20)
[2, 3, 5, 7, 11, 13, 17, 19]
>>> prime_list(50)
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
总结

Python中有多种生成素数列表的方法,其中暴力破解法和埃氏筛法是两种常见的方法,具体选用哪种方法,需要根据应用场景和数据规模选择。在实际工作中,可以根据具体情况来选择合适的方法,以获得更好的效果。