C++面向对象:筛选取法实现2~200间素数查找

需积分: 18 0 下载量 181 浏览量 更新于2024-08-24 收藏 8.65MB PPT 举报
本资源是一份关于C++面向对象编程的课件,主要关注如何使用筛选法求解2至200之间的所有素数。筛选法,又称埃拉托斯特尼筛法,是一种古老且高效的算法,用于找出一个范围内所有素数的方法。在这个示例中,程序首先创建一个数组,将1到200的所有数字初始化为1(因为最初都假设是素数)。然后,从2开始,依次将它的倍数标记为非素数,即置零。这个过程会重复,每次增加一个已知的素数,如3、5、7等,直到筛选出所有的素数。 具体步骤如下: 1. 首先,创建一个大小为200的数组,代表2到200的整数。 2. 从2开始,遍历数组,如果当前数i是素数(即未被标记为非素数),则执行以下操作: - 将i的倍数(i * i到200)设为0,表示它们不是素数。 3. 当遍历到某个数的平方大于200时,筛选过程结束,因为之后的数无法再是2到200范围内的素数。 4. 最后,数组中未被标记为0的元素就是2到200之间的素数。 C++程序可能如下所示: ```cpp #include <iostream> #include <vector> bool isPrime(int num) { if (num <= 1) return false; for (int i = 2; i * i <= num; i++) { if (num % i == 0) return false; } return true; } void sieveOfEratosthenes(int n, std::vector<int>& primes) { std::vector<bool> isComposite(n+1, true); // 假设所有数都是合数 for (int i = 2; i * i <= n; i++) { if (isComposite[i]) { for (int j = i * i; j <= n; j += i) { isComposite[j] = false; // 如果i的倍数是合数,则标记为非素数 } } } // 将素数添加到结果向量 for (int i = 2; i <= n; i++) { if (isComposite[i]) primes.push_back(i); } } int main() { int limit = 200; std::vector<int> primeNumbers; sieveOfEratosthenes(limit, primeNumbers); std::cout << "2到" << limit << "之间的素数有:"; for (const auto& prime : primeNumbers) { std::cout << prime << " "; } return 0; } ``` 这段代码展示了如何在C++中实现筛选法来寻找素数,同时也体现了C++语言的优势,如简洁的语法、强大的数据处理能力和良好的可移植性。然而,正如课件所述,C++的语法结构相对宽松,对于初学者来说需要一定时间去理解和熟练运用,包括理解循环、条件语句以及调试技巧。同时,课件也提到了C++语言的发展历程,从BCPL到C再到C++,反映了计算机程序设计语言的不断演进和优化。