"用筛选取法求出2~200之间的所有素数。-C++程序设计 PPT"
筛选取法,也称为埃拉托斯特尼筛法,是一种经典的算法,用于找出一个给定范围内所有的素数。在这个例子中,我们关注的是如何用C++实现这个算法来找出2到200之间的素数。首先,我们需要理解筛选取法的基本思想:从2开始,将所有2的倍数标记为非素数(即0),然后找到下一个未被标记的数(这里是3),将其所有倍数标记,接着继续找下一个未被标记的数,直到检查到范围的平方根。最后,未被标记的数就是素数。
在C++中,我们可以创建一个大小为201的数组,初始值都设为1,表示它们可能是素数。然后,从2开始遍历,对于每个数i,如果它未被标记(即数组中的值为1),就将它的所有倍数(2*i, 3*i, ..., n/i*i)标记为非素数(设为0)。这个过程会持续到遍历到范围的平方根。最后,数组中值为1的索引对应的数就是素数。
以下是C++实现筛选取法的示例代码:
```cpp
#include <iostream>
#include <cmath>
void sieveOfEratosthenes(int n) {
bool primes[n+1];
for (int i = 0; i <= n; i++)
primes[i] = true; // 初始化数组,假设所有数都是素数
for (int p = 2; p * p <= n; p++) { // 从2开始,因为2是最小的素数
if (primes[p]) { // 如果p是素数
for (int i = p * p; i <= n; i += p)
primes[i] = false; // 将p的倍数标记为非素数
}
}
std::cout << "素数有:";
for (int p = 2; p <= n; p++) {
if (primes[p])
std::cout << p << " ";
}
}
int main() {
int limit = 200;
sieveOfEratosthenes(limit);
return 0;
}
```
这段代码首先定义了一个布尔型数组`primes`,然后通过两个嵌套循环实现筛选取法。在主函数中,调用`sieveOfEratosthenes`函数并将200作为参数传递,程序将输出2到200之间所有的素数。
C++语言本身具有丰富的特性,如面向对象编程、泛型编程和底层操作能力,使得它在系统级编程、游戏开发、高性能计算等领域广泛应用。C++的灵活性和高效性使得它成为实现这种算法的理想选择。同时,由于C++的语法较为自由,调试程序可能需要更多的时间和精力,但它也为程序员提供了更大的控制权,能够编写出高效且可移植的代码。