C++实现100以内素数高效计算
问题描述
编写一个C++程序,输出100以内的所有素数。素数是只能被1和它本身整除的自然数,且大于1。
方法一:基础判断法
通过遍历2到100之间的每个数,检查是否为素数。对于每个数n,检查从2到sqrt(n)之间是否有能整除n的数。
#include <iostream>
#include <cmath>
bool isPrime(int n) {
if (n <= 1) return false;
for (int i = 2; i <= std::sqrt(n); ++i) {
if (n % i == 0) return false;
}
return true;
}
int main() {
for (int i = 2; i <= 100; ++i) {
if (isPrime(i)) {
std::cout << i << " ";
}
}
return 0;
}
方法二:埃拉托斯特尼筛法
使用筛法高效找出100以内的所有素数。筛法的核心思想是标记非素数,剩下的即为素数。
#include <iostream>
#include <vector>
void sieveOfEratosthenes(int n) {
std::vector<bool> isPrime(n + 1, true);
isPrime[0] = isPrime[1] = false;
for (int i = 2; i * i <= n; ++i) {
if (isPrime[i]) {
for (int j = i * i; j <= n; j += i) {
isPrime[j] = false;
}
}
}
for (int i = 2; i <= n; ++i) {
if (isPrime[i]) {
std::cout << i << " ";
}
}
}
int main() {
sieveOfEratosthenes(100);
return 0;
}
方法三:优化基础判断法
在基础判断法的基础上,跳过偶数(除了2),减少不必要的检查。
#include <iostream>
#include <cmath>
bool isPrime(int n) {
if (n <= 1) return false;
if (n == 2) return true;
if (n % 2 == 0) return false;
for (int i = 3; i <= std::sqrt(n); i += 2) {
if (n % i == 0) return false;
}
return true;
}
int main() {
for (int i = 2; i <= 100; ++i) {
if (isPrime(i)) {
std::cout << i << " ";
}
}
return 0;
}
方法四:预生成素数表
对于固定范围(如100以内),可以预先生成素数表,直接输出结果。
#include <iostream>
int main() {
int primes[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97};
for (int prime : primes) {
std::cout << prime << " ";
}
return 0;
}
性能对比
- 基础判断法:适用于小范围,逻辑简单但效率较低。
- 筛法:适合大范围,时间复杂度为O(n log log n)。
- 优化基础法:比基础法快,但仍不如筛法高效。
- 预生成表:适合固定范围,效率最高但灵活性差。
输出结果
无论采用哪种方法,程序输出的100以内素数均为:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
5G.okacbd071.asia/PoSt/1123_643763.HtM
5G.okacbd072.asia/PoSt/1123_757117.HtM
5G.okacbd073.asia/PoSt/1123_748828.HtM
5G.okacbd074.asia/PoSt/1123_778800.HtM
5G.okacbd075.asia/PoSt/1123_486479.HtM
5G.okacbd076.asia/PoSt/1123_956650.HtM
5G.okacbd077.asia/PoSt/1123_377437.HtM
5G.okacbd078.asia/PoSt/1123_850052.HtM
5G.okacbd079.asia/PoSt/1123_189663.HtM
5G.okacbd080.asia/PoSt/1123_633040.HtM
5G.okacbd071.asia/PoSt/1123_284609.HtM
5G.okacbd072.asia/PoSt/1123_305162.HtM
5G.okacbd073.asia/PoSt/1123_176919.HtM
5G.okacbd074.asia/PoSt/1123_345166.HtM
5G.okacbd075.asia/PoSt/1123_979355.HtM
5G.okacbd076.asia/PoSt/1123_724504.HtM
5G.okacbd077.asia/PoSt/1123_012248.HtM
5G.okacbd078.asia/PoSt/1123_714269.HtM
5G.okacbd079.asia/PoSt/1123_173573.HtM
5G.okacbd080.asia/PoSt/1123_953527.HtM
5G.okacbd071.asia/PoSt/1123_207203.HtM
5G.okacbd072.asia/PoSt/1123_877620.HtM
5G.okacbd073.asia/PoSt/1123_922300.HtM
5G.okacbd074.asia/PoSt/1123_737198.HtM
5G.okacbd075.asia/PoSt/1123_799858.HtM
5G.okacbd076.asia/PoSt/1123_637802.HtM
5G.okacbd077.asia/PoSt/1123_411153.HtM
5G.okacbd078.asia/PoSt/1123_205421.HtM
5G.okacbd079.asia/PoSt/1123_903575.HtM
5G.okacbd080.asia/PoSt/1123_273347.HtM
5G.okacbd071.asia/PoSt/1123_008018.HtM
5G.okacbd072.asia/PoSt/1123_396090.HtM
5G.okacbd073.asia/PoSt/1123_634003.HtM
5G.okacbd074.asia/PoSt/1123_891026.HtM
5G.okacbd075.asia/PoSt/1123_359363.HtM
5G.okacbd076.asia/PoSt/1123_408608.HtM
5G.okacbd077.asia/PoSt/1123_827588.HtM
5G.okacbd078.asia/PoSt/1123_371478.HtM
5G.okacbd079.asia/PoSt/1123_483677.HtM
5G.okacbd080.asia/PoSt/1123_386248.HtM
5G.okacbd071.asia/PoSt/1123_816379.HtM
5G.okacbd072.asia/PoSt/1123_700343.HtM
5G.okacbd073.asia/PoSt/1123_129455.HtM
5G.okacbd074.asia/PoSt/1123_864217.HtM
5G.okacbd075.asia/PoSt/1123_625401.HtM
5G.okacbd076.asia/PoSt/1123_368896.HtM
5G.okacbd077.asia/PoSt/1123_268853.HtM
5G.okacbd078.asia/PoSt/1123_305007.HtM
5G.okacbd079.asia/PoSt/1123_239469.HtM
5G.okacbd080.asia/PoSt/1123_442365.HtM
5G.okacbd071.asia/PoSt/1123_305784.HtM
5G.okacbd072.asia/PoSt/1123_005431.HtM
5G.okacbd073.asia/PoSt/1123_837868.HtM
5G.okacbd074.asia/PoSt/1123_326158.HtM
5G.okacbd075.asia/PoSt/1123_066559.HtM
5G.okacbd076.asia/PoSt/1123_532115.HtM
5G.okacbd077.asia/PoSt/1123_825548.HtM
5G.okacbd078.asia/PoSt/1123_412547.HtM
5G.okacbd079.asia/PoSt/1123_374998.HtM
5G.okacbd080.asia/PoSt/1123_026978.HtM
5G.okacbd071.asia/PoSt/1123_589853.HtM
5G.okacbd072.asia/PoSt/1123_803506.HtM
5G.okacbd073.asia/PoSt/1123_678566.HtM
5G.okacbd074.asia/PoSt/1123_739849.HtM
5G.okacbd075.asia/PoSt/1123_761536.HtM
5G.okacbd076.asia/PoSt/1123_739544.HtM
5G.okacbd077.asia/PoSt/1123_949415.HtM
5G.okacbd078.asia/PoSt/1123_783261.HtM
5G.okacbd079.asia/PoSt/1123_771006.HtM
5G.okacbd080.asia/PoSt/1123_815775.HtM
5G.okacbd071.asia/PoSt/1123_968738.HtM
5G.okacbd072.asia/PoSt/1123_514361.HtM
5G.okacbd073.asia/PoSt/1123_003718.HtM
5G.okacbd074.asia/PoSt/1123_128269.HtM
5G.okacbd075.asia/PoSt/1123_800166.HtM
5G.okacbd076.asia/PoSt/1123_204628.HtM
5G.okacbd077.asia/PoSt/1123_581085.HtM
5G.okacbd078.asia/PoSt/1123_126444.HtM
5G.okacbd079.asia/PoSt/1123_593482.HtM
5G.okacbd080.asia/PoSt/1123_936624.HtM
