📜  获取素数python(1)

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

获取素数Python

在计算机科学中,质数(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 中实现获取素数有多种方法,其中比较常见的是暴力枚举和埃拉托色尼筛法。通过本文的介绍,相信大家已经了解了这两种方法的具体实现过程。