vc++2010 用筛选法求100之内的素数
时间: 2024-11-17 20:29:45 浏览: 2
VC++2010 中可以使用筛选法(Sieve of Eratosthenes)来求解100以内的素数。这种方法是一种古老的计算求素数的方法,步骤如下:
1. 创建一个布尔数组,初始值全部设为 `true`,表示从2到100的所有数字都是潜在的素数。
2. 遍历数组,从第一个非素数(即2的倍数)开始,将它的所有倍数标记为合数(即`false`)。例如,首先将2的倍数(4、6、8...)标记,然后跳过当前已知的素数2。
3. 继续查找下一个未被标记为合数的数,将其作为新的素数,并继续更新其倍数。这个过程会一直持续到大于√100的数,因为超过这个范围的因子肯定已经在之前的步子里被处理过了。
4. 当遍历结束后,数组中仍然为 `true` 的元素就是素数。
以下是简单的伪代码示例:
```cpp
#include <iostream>
#include <vector>
std::vector<int> SieveOfEratosthenes(int n) {
std::vector<bool> isPrime(n+1, true);
isPrime[0] = false;
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;
}
}
// 将素数放入结果向量
std::vector<int> primes;
for (int i = 2; i <= n; ++i)
if (isPrime[i])
primes.push_back(i);
return primes;
}
int main() {
int limit = 100;
std::vector<int> primeNumbers = SieveOfEratosthenes(limit);
for (int prime : primeNumbers)
std::cout << prime << " ";
std::cout << "
阅读全文