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

6.C++经典实例-计算给定范围内的素数(质数)

所谓素数(也称为质数)是指大于1的自然数,且只能被1和它本身整除的数。例如,2、3、5、7、11等都是素数。

下面是计算3000内所有的素数的实例

#include <iostream>
#include <vector>
#include <cmath>// 判断一个数是否为素数
bool isPrime(int num) {if (num <= 1) return false;  // 1及以下的数不是素数if (num == 2) return true;   // 2是最小的素数if (num % 2 == 0) return false;  // 偶数(除了2)都不是素数// 检查从3到sqrt(num)的所有奇数for (int i = 3; i <= std::sqrt(num); i += 2) {if (num % i == 0) return false;}return true;
}int main() {std::vector<int> primes;// 计算3000以内的所有素数for (int i = 2; i < 3000; ++i) {if (isPrime(i)) {primes.push_back(i);}}// 输出所有素数std::cout << "3000以内的所有素数:" << std::endl;for (int prime : primes) {std::cout << prime << " ";}std::cout << std::endl;return 0;
}

以下是执行结果:

大家想一下为什么循环到指定数的开方即可,不用再循环了,比如判断101是否为素数,那么对101进行开方计算,得到10.0499,那么只要循环10次即可,不用循环100次,可以大大节省计算量,想一想,如果10.0499*10.0499等于101,那么,只要这两个数相乘等于101的话,就不会只有1和他自己,如果小于这个开方数的,存在,也会出现重复,不为素数,当有一个数大于10.0499的时候,另外一个数,会小于10.0499,即只要是除法,总有一个数在比10.0499要小一点,所以循环到开方即可,不用全部循环,节省算力,提升运行效率。


http://www.mrgr.cn/news/54747.html

相关文章:

  • 更换镜像部署LNMP环境
  • 如何利用 Python抓取网页数据 其他方式抓取网页数据列举
  • ant design vue TimePicker时间选择器不点击确认也可以设置值
  • 控制Stable Diffusion生成质量的多种方法
  • Git 总结
  • Unity 同项目多开
  • SLACC Simion-based Language Agnostic Code Clones
  • 基于STM32的超声波流量计设计
  • python编译问题 当你编译第一个python程序时可能出现如下错误
  • 【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,1-11
  • Tornado简单使用
  • JavaScript 新手必知的基本概念
  • 深入了解 Flannel(3):vxlan在flannel中的作用
  • 【Linux系统编程】冯诺依曼体系结构与操作系统
  • 操作系统之内存管理基本概念
  • SpringCloudAlibaba[Nacos]注册配置中心注册与发现服务
  • CGAL专篇-Kernel计算精度
  • 使用模拟器获取app的素材文件
  • 《30 年失联姐妹的短暂相聚与决绝分手》
  • 整合全文检索引擎 Lucene 添加站内搜索子模块
  • Java中的动态代理——介绍与使用示例
  • 数据库必会面试题(含答案)
  • 数据结构与算法——Java实现 41.对称二叉树
  • LeetCode Hot100 - 滑动窗口篇
  • JavaScript 数组的魔法
  • JVM面试题