当前位置: 首页 > ds >正文

【C++练习】06.输出100以内的所有素数

目录

  • 输出100以内的所有素数
    • 方法1:基础判断法
    • 方法2:埃拉托斯特尼筛法(效率更高)
    • 方法3:优化版筛法(只考虑奇数)
    • 方法4:使用STL算法
    • 方法5:递归实现
    • 总结:

输出100以内的所有素数

方法1:基础判断法

#include <iostream>
using namespace std;bool isPrime(int n) {if (n <= 1) return false;for (int i = 2; i * i <= n; i++) {if (n % i == 0) return false;}return true;
}int main() {for (int i = 2; i <= 100; i++) {if (isPrime(i)) {cout << i << " ";}}return 0;
}

方法2:埃拉托斯特尼筛法(效率更高)

#include <iostream>
#include <vector>
using namespace std;void sieveOfEratosthenes(int n) {vector<bool> prime(n + 1, true);prime[0] = prime[1] = false;for (int p = 2; p * p <= n; p++) {if (prime[p]) {for (int i = p * p; i <= n; i += p) {prime[i] = false;}}}for (int p = 2; p <= n; p++) {if (prime[p]) {cout << p << " ";}}
}int main() {sieveOfEratosthenes(100);return 0;
}

方法3:优化版筛法(只考虑奇数)

#include <iostream>
#include <vector>
using namespace std;void optimizedSieve(int n) {if (n >= 2) cout << "2 ";int size = (n - 1) / 2;vector<bool> prime(size, true);for (int i = 0; i < size; i++) {if (prime[i]) {int p = 2 * i + 3;cout << p << " ";for (int j = p * p; j <= n; j += 2 * p) {prime[(j - 3) / 2] = false;}}}
}int main() {optimizedSieve(100);return 0;
}

方法4:使用STL算法

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;bool isPrime(int n) {if (n <= 1) return false;for (int i = 2; i * i <= n; i++) {if (n % i == 0) return false;}return true;
}int main() {vector<int> numbers(99);iota(numbers.begin(), numbers.end(), 2);numbers.erase(remove_if(numbers.begin(), numbers.end(), [](int n) { return !isPrime(n); }),numbers.end());for (int n : numbers) {cout << n << " ";}return 0;
}

方法5:递归实现

#include <iostream>
using namespace std;bool isPrime(int n, int i = 2) {if (n <= 2) return (n == 2);if (n % i == 0) return false;if (i * i > n) return true;return isPrime(n, i + 1);
}int main() {for (int i = 2; i <= 100; i++) {if (isPrime(i)) {cout << i << " ";}}return 0;
}

总结:

  • 基础判断法简单直观,适合小范围素数判断
  • 筛法在大数据量时效率更高
  • STL版本展示了C++标准库的使用
  • 递归版本展示了另一种思维方式

输出结果都是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
http://www.xdnf.cn/news/20207.html

相关文章:

  • Java 攻克 PDF 表格数据提取:从棘手挑战到自动化实践
  • 深度学习——数据增强
  • devcpp 5.11的详细安装步骤
  • 上位机知识篇---conda run
  • 文华财经多空提示指标公式 变色K线多空明确指标 文华wh6赢顺多空买卖提示指标
  • 平衡车 --- 测量减速比 M法、T法测速
  • 当公司在你电脑上安装了IP-guard,你必须知道的事
  • 【面试题】你在项目中做过哪些相关性优化?
  • 【sft技巧】模型微调技巧
  • 零样本学习与少样本学习
  • 下载及交叉编译libconfig
  • 惊爆!耐达讯自动化RS485转Profinet,电机连接的“逆天神器”?
  • C++17无锁编程实战
  • 2025数学建模国赛A题思路首发!
  • 【赛题已出】2025高教社杯全国大学生数学建模竞赛ABCDE赛题已发布!
  • 阵列信号处理之均匀面阵波束合成方向图的绘制与特点解读
  • 从零开始学大模型之预训练语言模型
  • [科普] 卫星导航系统的授时原理与精度分析
  • 【案例分享】外国使馆雷电综合防护系统改造方案(四)
  • 2025年数学建模国赛B题超详细解题思路
  • 【LVGL】从HTML到LVGL:嵌入式UI的设计迁移与落地实践
  • C# FileInfo 类深度解析文件时间属性
  • NIPT 的时点选择与胎儿的异常判定
  • leetcode162.寻找峰值
  • STM32 读写备份寄存器
  • VR红色教育基地+数字党建展厅+智慧校史馆
  • 网络安全防护——主动防护和被动防护
  • java程序员的爬虫技术
  • 研发文档更新滞后的常见原因与解决方法
  • 【大模型实战笔记 1】Prompt-Tuning方法