找出从1到n之间的所有的素数:
include
include
using namespace std;
bool isPrime(int num) {
if (num <= 1) return false; // 0和1不是素数
if (num == 2) return true; // 2是素数
if (num % 2 == 0) return false; // 偶数不是素数(除了2)
// 枚举所有可能的因子,范围从3到sqrt(num),步长为2(只检查奇数)
for (int i = 3; i * i <= num; i += 2) {if (num % i == 0) {return false; // 找到因子,不是素数}
}
return true; // 没有找到因子,是素数
}
int main() {
int n;
cout << "请输入一个正整数 n: ";
cin >> n;
vector<int> primes; // 存储所有素数的向量// 枚举算法:遍历1到n之间的所有数
for (int i = 1; i <= n; i++) {if (isPrime(i)) {primes.push_back(i); // 将素数添加到结果向量中}
}// 输出结果
cout << "1 到 " << n << " 之间的素数有: ";
for (int prime : primes) {cout << prime << " ";
}
cout << endl;return 0;
}
这个就是枚举算法的一道基础题,这个示例展示了枚举算法的基本框架:遍历所有可能性,逐一验证条件。在实际应用中,枚举算法的效率可能需要通过缩小查找的范围,因为枚举是暴力地把所有情况一一列举出来,而往往会有很多种情况,所以说,枚举的应用范围不算太广,不过算是最好理解的一种算法。