📜  素数生成器 c++ (1)

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

素数生成器 C++

素数生成器是生成素数数列的程序,素数是指只能被1和本身整除的正整数。素数生成器使用筛法的方式来查找素数数列,其生成素数的速度取决于具体算法的实现。

实现思路

素数生成器的实现思路大致如下:

  1. 初始化一个最大范围内的数列,标记所有数为未筛选。
  2. 从2开始,筛选掉所有能被2整除的数。
  3. 不断递增筛选数的值,对于未被筛选的数,筛选掉所有能被其整除的数。
  4. 经过筛选,剩下的即是素数数列。
C++ 实现

下面是一个使用 C++ 实现素数生成器的示例代码:

#include <iostream>
#include <cmath>
#include <vector>

using namespace std;

vector<int> prime_sieve(int n) {
  vector<bool> is_prime(n + 1, true);
  vector<int> primes;

  for (int i = 2; i <= sqrt(n); i++) {
    if (is_prime[i]) {
      for (int j = i * i; j <= n; j += i) {
        is_prime[j] = false;
      }
    }
  }

  for (int i = 2; i <= n; i++) {
    if (is_prime[i]) {
      primes.push_back(i);
    }
  }

  return primes;
}

int main() {
  int n = 100;
  vector<int> primes = prime_sieve(n);

  for (auto prime : primes) {
    cout << prime << " ";
  }

  return 0;
}

注:此示例代码使用的是埃拉托色尼筛法(Sieve of Eratosthenes)。

性能分析

假设要查找 N 以内的素数数列,使用埃拉托色尼筛法的时间复杂度为 O(N log log N)。

当然,素数生成器也有其他优秀的算法实现,例如线性筛法(Linear sieve)等。

总结

素数生成器是一个极为基础的算法问题,但是其实现思路以及具体算法实现是有一定难度的。合理地选取算法,可以提高素数生成器的执行效率。