1、引言

素数又叫质数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
0和1既不是质数也不是合数,最小的质数是2。
学过计算机编程语言(如C语言)的小伙伴应该都有一点了解,那么如何判断一个自然数是不是素数呢?
楼主分享了以下不同的版本

1.普通版

//注意用良好的英文释义表示,初学者常容易随性用中文式拼音表达,例如以下函数命名
bool IsSushu(int num)
{if( num == 2)return true;for (int i = 2; i < num; i++){if (num % i == 0){return false;}}return true;
}

结合自然数及素数的判断性质,对自然数2应特殊处理。
然后我们只需要从2开始,依次判断是否能被 i 整除,如果能,则不是素数,循环结束若都没有被整除过,那么就是素数。

2.优化版本

我们注意到对于自然数n,除去1和自身外,分解成两个因数相乘,一定是一个因数 n1 ≤ sqrt(n),另外一个因数 n2 ≥ sqrt(n),因此我们做整除判断不必判断到 n - 1,只需要判断到 sqrt(n)即可,因为若sqrt(n)左侧找不到约数,那么右侧也一定找不到约数。

bool IsPrime(int num)
{if (num == 2)return true;int k = sqrt(num);for (int i = 2; i <= k; i++){if (num % i == 0){return false;}}return true;
}

3.其他优化版本

关于上面的算法还可以进一步优化,我们只需要判断针对大于2的奇数,即优化循环体内除数自增的步长,因为大于2的偶数一定能被2整除,整理了一下,最终给出以下算法:

//使用良好的英文表达
bool IsPrime(int candidate)
{if ((candidate & 1) != 0){int limit = sqrt(candidate);for (int divisor = 3; divisor <= limit; divisor += 2){if (candidate % divisor == 0)return false;}return true;}return (candidate == 2);
}

当然,网上还有一些专门根据素数分布规律:大于5的质数一定与6的倍数相邻,除去6n±2等非验证项,只需验证 6n-1与6n+1的相关算法,感兴趣的小伙伴可以研究一下,其实也是优化了除数的自增步长,因此不在此赘述。
我们从最基本的判断素数算法可以看到不同的版本有着不同的思维方式,面对复杂的算法更值得我们从多方面分析。

【判断一个数是不是素数】相关推荐

  1. C语言试题六十九之请编写函数判断一个数是不是素数

    1. 题目 编写函数:判断一个数是不是素数 素数:素数又称质数.所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除. 2 .温馨提示 ...

  2. 用户输入的数是否为合数php,php怎么判断一个数是不是素数?

    质数又称素数.一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数:否则称为合数.(注:1不是素数.)那么php怎么判断一个数是不是素数?下面本篇文章就来给大家介绍一下. 下面我们就 ...

  3. js中如何判断一个数是不是素数(三种方法)

    素数:又叫质数,在大于1的自然数中,除了1和它本身以外不再有其他因数.即只能被1和它本身整除的数就是素数 这是作为编程入门时,经常会做的一道题. <!DOCTYPE html> <h ...

  4. 用Java编写2到100之间的素数;判断一个数是不是素数

    目录 1.用Java编写2到100之间的素数 2.判断一个数是不是素数 1.用Java编写2到100之间的素数 package day_2023_4_18;public class Main {pub ...

  5. 请编写函数判断一个数是不是素数

    1. 题目 编写函数:判断一个数是不是素数 素数:素数又称质数.所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除. 2 .温馨提示 ...

  6. 用C语言实现一个函数,判断一个数是不是素数

    用C语言实现一个函数,判断一个数是不是素数 编写程序,设计一个函数IsPrime,该函数用于判定一个数m是否是素数,如果是素数则返回1,否则返回0. 素数定义:只能被1和本身整除而不能被他其他正整数整 ...

  7. c语言判断一个数是不是质数的n次方,c语言实践 判断一个数是不是素数

    int main() { int input = 0; scanf_s("%d",&input); if (input < 2) { printf("wro ...

  8. java 判断一个数是不是素数

    1.素数就是只能被1和自身整除的数(任何数都能被1整除,这里就不做过多解说了) 2.分析:输入一个数判断是不是素数 比如:7 这里可以写一个循环,除了7以外判断一下其他小于7的数能不能被整除,如果还能 ...

  9. Java 求1-100以内的所有素数,判断一个数是不是素数。Java代码实现附测试结果图

    质数(prime number)又称素数,有无限个. 质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数. 小师弟问了我个这么个联系题,虽然看似简单,但是,大家都觉得简单的东西 ...

  10. C++ 判断一个数是不是素数

    题目:判断一个数是不是素数,1 < N <= 50000 思路:判断n是否整除(求余是否等于0)大于1而小于sqrt(n)中的任何一个数,如果有则不是素数,否则是素数 实现代码: // 判 ...

最新文章

  1. 楼主考南师计算机学硕,南京师范大学考研详解:据说这所学校不太好考?嗯,是真的!...
  2. 浏览器保存密码后自动填充问题
  3. HTML(六)——表单验证、正则表达式、事件
  4. 深度对抗学习在图像分割和超分辨率中的应用
  5. 如何自学python基础-零基础小白该如何学习Python?
  6. 【小松教你手游开发】【unity实用技能】计算目标物体是否在自己的扇形视野范围...
  7. NumberUtils源码分析
  8. MindManager: Draw your own MindMap!
  9. 动态给H5页面绑定数据,基本万能无错误!
  10. [react] render函数中return如果没有使用()会有什么问题?
  11. python 去除nan inf_Python实现半自动评分卡建模(附代码)
  12. 用 Python 写出这样的进度条,刷新了我对进度条的认知
  13. 10无法勾选隐藏的项目_Excel的隐藏和保护,你会用吗?
  14. Eclipse中的visual editor 獲取和安装
  15. Web后端学习笔记 Flask(11)Local线程隔离对象
  16. GB28181-2016系统相关技术介绍
  17. Android开发工程师,前行路上的14项技能
  18. 合宙Air724UG二次开发(2):资料描述
  19. Pyecharts上的颜色设置
  20. INTERVAL 用法

热门文章

  1. 新一代智能视频云发展现状分析:五大要素成关键
  2. 高通发布骁龙845详细解读!
  3. java 吸血鬼数字_用java求吸血鬼数字 | 学步园
  4. Office 2007的VBA,以及Office开发的随想
  5. flink stream 终于上local 集群 运行起来
  6. 全文搜索引擎----ElasticSearch和Solr
  7. 【UE】BUILD ERROR: Missing precompiled manifest for ‘****‘.
  8. 编译提示“/usr/bin/ld: cannot find -lgflags-shared“错误的解决办法
  9. 目前国内常用的无纸化会议系统——迅控无纸化
  10. Windows运行程序时桌面窗口卡死