📅  最后修改于: 2023-12-03 15:04:37.124000             🧑  作者: Mango
素数是只能被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中有多种生成素数列表的方法,其中暴力破解法和埃氏筛法是两种常见的方法,具体选用哪种方法,需要根据应用场景和数据规模选择。在实际工作中,可以根据具体情况来选择合适的方法,以获得更好的效果。