📅  最后修改于: 2023-12-03 15:41:11.224000             🧑  作者: Mango
素数生成器是生成素数数列的程序,素数是指只能被1和本身整除的正整数。素数生成器使用筛法的方式来查找素数数列,其生成素数的速度取决于具体算法的实现。
素数生成器的实现思路大致如下:
下面是一个使用 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)等。
素数生成器是一个极为基础的算法问题,但是其实现思路以及具体算法实现是有一定难度的。合理地选取算法,可以提高素数生成器的执行效率。