返回

使用 Python 轻松获取质数数量

前端

在计算机科学中,质数是一个自然数,它除了 1 和自身之外没有其他正因数。识别和计算质数是编程中的一个常见任务,尤其是在密码学和数据安全等领域。

这篇文章将通过 Python 提供一种简单而有效的算法,用于计算小于给定非负整数 n 的质数数量。我们将在朴素的质数测试算法的基础上进行扩展,引入埃拉托斯特尼筛法,这是一种更优化的质数识别方法。

朴素质数测试

朴素质数测试算法基于这样一个事实:对于一个给定的整数 n,如果它大于 1 并且没有小于或等于 n 的平方根的因数,那么它就是质数。

def is_prime(n):
  """
  朴素质数测试

  :param n: 要测试的整数
  :return: n 是否为质数
  """
  if n <= 1:
    return False

  for i in range(2, int(n**0.5) + 1):
    if n % i == 0:
      return False

  return True

埃拉托斯特尼筛法

朴素质数测试算法虽然简单,但当 n 非常大时效率较低。埃拉托斯特尼筛法通过维护一个布尔数组,其中索引表示整数,值为 True 表示该整数是质数,来改进这一算法。

def sieve_of_eratosthenes(n):
  """
  埃拉托斯特尼筛法

  :param n: 筛选范围的最大整数
  :return: 一个布尔数组,其中索引表示整数,值为 True 表示该整数是质数
  """
  sieve = [True] * (n + 1)
  sieve[0] = sieve[1] = False

  for i in range(2, int(n**0.5) + 1):
    if sieve[i]:
      for j in range(i * i, n + 1, i):
        sieve[j] = False

  return sieve

计算质数数量

有了埃拉托斯特尼筛法,我们可以轻松计算小于非负整数 n 的质数数量。

def count_primes(n):
  """
  计算小于 n 的质数数量

  :param n: 上限(不包括在内)
  :return: 小于 n 的质数数量
  """
  sieve = sieve_of_eratosthenes(n)
  return sum(sieve)

结论

本教程提供了使用 Python 轻松计算小于给定非负整数 n 的质数数量的两种方法。埃拉托斯特尼筛法提供了一种比朴素质数测试算法更有效的算法,特别是在处理大整数时。通过遵循本文提供的步骤,您将能够编写一个健壮且高效的算法来解决这一常见编程问题。