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

【C++ 基础数论】质数判断

质数判断

质数:对于所有大于 1 的自然数而言,如果该数除 1 和自身以外没有其它因数 / 约数,则该数被称为为质数,质数也叫素数。

如何判定一个数是否为质数呢?

一个简单的方法是 试除法 : 对于一个数 n, 可以枚举 [ 2, n-1 ] 区间内所有数,去尝试整除 n,如果在区间内存在一个数能将 n 整除,则 n 不是质数。

还要注意一个点 : 最小的质数是 2,小于 1 的数不是质数。

所以,代码如下:

bool isPrime(int n){if(n <= 1) return false;for(int i = 2; i < n; i++){if(n % i == 0) return false;}return true;
}

那么上述代码还能优化吗?答案是 可以 。

如果按照上面的代码运行的话,对于一个数,我们将它所有的约数全都枚举了一遍,到底有没有必要呢?

下面举个例子: 例如12,显然12不是质数, 它的因数有1、2、3、4、6、12,我们可以发现他的因数是成对出现的,(1, 12)、(2, 6)、(3, 4),那我们能不能只枚举小的那一个因数呢,这样就算是一个质数,当我们枚举一直到 n \sqrt{n} n ,我们发现没有符合条件的因子时就不用再向下枚举了,因为一个合数的因子都是成对出现的。

所以 for 循环中的条件可以写成这样 :

i ≤ \leq n \sqrt{n} n

但是一个数的平方根不一定是一个整数,所以我们还可以这样写:

i ∗ \ast i ≤ \leq n

有的时候,当 n 很大的时候, i ∗ \ast i 有可能会超内存,可以改为 :

i ≤ \leq n / i

当然还有一点很重要,不要忘了 4、9、16、25 等等这种是一个数平方的要特别注意

最终代码

bool isPrime(int n){if(n <= 1) return false;for(int i = 2; i <= n/i; i++){if(n % i == 0) return false;}return true;
}
http://www.xdnf.cn/news/484165.html

相关文章:

  • Pageassist安装(ollama+deepseek-r1)
  • AI 赋能 Copula 建模:大语言模型驱动的相关性分析革新
  • 每周资讯 | 腾讯Q1财报:国内游戏业务收入同比增长24%;Tripledot 8亿美元收购AppLovin游戏业务
  • 十一、Hive JOIN 连接查询
  • IDEA中git对于指定文件进行版本控制
  • 架构与UML4+1视图
  • 基于PXIE 总线架构的Kintex UltraScale 系列FPGA 高性能数据预处理板卡
  • leetcode2749. 得到整数零需要执行的最少操作数-medium
  • ai agent(智能体)开发 python高级应用5:crawl4ai 如何建立一个全面的知识库 第一步找分类
  • Redis 五种类型基础操作(redis-cli + Spring Data Redis)
  • STM32F407VET6的HAL库使用CRC校验的思路
  • React文件上传组件封装全攻略
  • WEB安全--Java安全--shiro550反序列化漏洞
  • Linux——UDP/TCP协议理论
  • 利用Python高效整理猫狗数据集训练集与验证集(附源码讲解)
  • 技术书籍推荐(001)
  • 硬件中的OID是什么?SNMP如何通过OID获取信息?——用“图书馆”比喻彻底讲清底层原理-优雅草卓伊凡|小无
  • makefile细节说明
  • 在 VSCode 中运行 Vue.js 项目
  • 抛物线运动路径动画实现
  • Android framework 中间件开发(三)
  • 高效管理嵌套Git仓库:三合一脚本解决方案
  • 【AI】CUDA 是如何成功的?(AI 计算的民主化,第 3 部分)
  • MOS管、三极管与IGBT管的原理与应用全面对比
  • 如何解决Move to iOS 不起作用的问题?
  • Yocto Project 快速构建
  • 将单链表反转【数据结构练习题】
  • 机器学习入门之KNN算法和交叉验证与超参数搜索(三)
  • 如何在一台环境中同时安装ragflow和ragflow-plus
  • PCL 绘制二次曲面