📅  最后修改于: 2023-12-03 15:11:53.141000             🧑  作者: Mango
在计算机科学中,质数(prime number)又称素数,指在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数(约数)的自然数。因此,获取素数是计算机科学中的一个重要问题。
在 Python 中,实现获取素数有多种方法。下面我们将介绍两种常见的方法。
暴力枚举是最简单的获取素数的方法,但是它的运行效率较低。具体实现过程如下:
def get_prime(n):
prime_list = []
for num in range(2, n+1):
for i in range(2, num):
if num % i == 0:
break
else:
prime_list.append(num)
return prime_list
代码解释:
get_prime(n)
获取小于等于 n 的素数列表;num
从 2 到 n 依次枚举每个数;for i in range(2, num)
枚举 2 ~ num-1 中的每个数;if num % i == 0:
用 num 对 i 进行取模,如果为 0,表示 num 有 i 这个因数,跳出内层循环,开始下一轮的 num;else:
如果内层循环正常结束,表示 num 是质数,将其添加到 prime_list 中。埃拉托色尼筛法是一种获取素数的高效方法。具体实现过程如下:
def get_prime(n):
is_prime = [True] * (n+1)
is_prime[0], is_prime[1] = False, False
prime_list = []
for i in range(2, n+1):
if is_prime[i]:
prime_list.append(i)
j = i * i
while j <= n:
is_prime[j] = False
j += i
return prime_list
代码解释:
get_prime(n)
获取小于等于 n 的素数列表;is_prime
列表用于标记每个数是否为素数,初始值为 True;is_prime[0], is_prime[1] = False, False
将 0 和 1 标记为非素数;for i in range(2, n+1)
枚举 2 ~ n 中的每个数;if is_prime[i]:
如果 i 为素数,将其添加到 prime_list 中;j = i * i
从 i 的平方开始,将其所有倍数都标记为非素数;while j <= n:
如果 j 小于等于 n,将 is_prime[j] 标记为 False,即 j 非素数;j += i
j 加上 i,继续标记 i 的下一个倍数。获取素数是计算机科学中的一项基本任务,Python 中实现获取素数有多种方法,其中比较常见的是暴力枚举和埃拉托色尼筛法。通过本文的介绍,相信大家已经了解了这两种方法的具体实现过程。