当前位置: 首页 > 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;
}

相关文章:

  • AI大模型中系统化的KV Cache加速方案,减少KV Cache显存占用的优化方法
  • AI推介-大语言模型LLMs论文速览(arXiv方向):2024.11.25-2024.11.30
  • 【打破信息差】萌新认识与入门算法竞赛
  • QBasic 一款古老的编程语言在现代学习中的价值(附程序)
  • 刷leetcodehot100返航版--双指针5/16
  • 西安前端面试
  • 机器学习中的特征工程:解锁模型性能的关键
  • 计算机组成原理——数据的表示
  • 代码随想录 算法训练 Day3:链表1
  • 隧道结构安全在线监测系统解决方案
  • 从裸机开发到实时操作系统:FreeRTOS详解与实战指南
  • 英飞凌TLE9945GPT12
  • SSH主机密钥验证失败:全面解决方案与技术手册
  • 【言语】刷题5(填空)
  • MySQL数据库——支持远程IP访问的设置方法总结
  • 【RabbitMQ】消息丢失问题排查与解决
  • 将单链表反转【数据结构练习题】
  • (for 循环) VS (LINQ) 性能比拼 ——c#
  • 半导体供应链B2B集成时应该注意的要点
  • vue3中预览Excel文件
  • 海外考古大家访谈|冈村秀典:礼制的形成与早期中国
  • 对谈|“大礼议”:嘉靖皇帝的礼法困境与权力博弈
  • 端午小长假前夜火车票今日开抢,多个技巧提高购票成功率
  • 国税总局上海市税务局通报:收到王某对刘某某及相关企业涉税问题举报,正依法依规办理
  • 董军同德国国防部长举行会谈
  • 横跨万里穿越百年,《受到召唤·敦煌》中张艺兴一人分饰两角