判断 一个数 是不是 质数 / 素数

【面试必备 100题 系列 】- 001 - 判断 一个数 是不是 质数 / 素数

一、命题分析:

质数 又称 素数。指整数在一个大于1的 自然数 中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数。比1大但不是素数的数称为 合数 。1和0既非素数也非合数。素数在 数论中有着很重要的作用。

二、答案解析:

1、简洁、低效方案:

public static boolean isPrime(int n){if (n <= 3) {return n > 1;}for(int i = 2; i < n; i++){if (n % i == 0) {return false;}}return true;
}

首先,过滤一下小于等于 3 的数,因为小于等于3的自然数只有 2 和 3 是质数/ 素数。

然后,我们只需要从 2 开始,一直到小于其自身,依次判断能否被 n 整除即可,能够整除则不是质数/ 素数,否则是质数/ 素数。

2、优化方案:

假设 n 是合数,必然存在 非1 的两个约数 p1p2,其中 p1<=sqrt(n)p2>=sqrt(n)

由此我们可以改进上述方法优化循环次数。如下:

public static boolean isPrime(int n) {if (n <= 3) {return n > 1;}int sqrt = (int)Math.sqrt(n);for (int i = 2; i <= sqrt; i++) {if(n % i == 0) {return false;}}return true;
}

3、最优方案:
    质数还有一个不为人知的特性:

/*** 恒等于 6x-1 或者 6x+1,其中 x 是大于等于1的自然数*/

基于这个理论我们不难推算出:

a、能被 6 整除的,肯定不是质数/ 素数,可以肯定的是,6x 不是质数/ 素数;

b、能被  2 / 3 整除的,肯定不是 质数/ 素数, 因此,6x+2 / 6x+3/ 6x+4  肯定也不是质数/ 素数;

那么,就剩下 6x+16x+5 (即等同于6x-1) 可能是质数/ 素数了。

得出方案:循环的步长可以设为 6,每次只判断 6 前后的两个数即可。

public static boolean isPrime(int num) {if (num <= 3) {return num > 1;}// 不在6的倍数两侧的一定不是质数if (num % 6 != 1 && num % 6 != 5) {return false;}int sqrt = (int) Math.sqrt(num);for (int i = 5; i <= sqrt; i += 6) {if (num % i == 0 || num % (i + 2) == 0) {return false;}}return true;
}

判断 一个数 是不是 质数 / 素数相关推荐

  1. 1,判断一个数是不是质数。 2,选取出100以上、1000以内所有个位数字与十位数字之和被10除所得余数恰好是百位数字的素数(如293).输出上述这些素数的个数及这些素数的和.

    对于大于 1 的数,如果除了 1 和它本身,它不能再被其它正整数整除,那么我们说它是一个质数.晓萌想判断一个数是不是质数,希望找你写个程序,帮助她进行判断. 输入格式 输入包括一行,为一个整数 N(1 ...

  2. 写一个程序判断一个数是否为素数(质数)

    写一个程序判断一个数是否为素数(质数) #include<stdio.h> int zhishu(int a) {     int i;     int flag;//设一个flag方便判 ...

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

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

  4. python脚本判断一个数是否为素数的几种方法

    质数又称素数.指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数.素数在数论中有着很重要的地位.比1大但不是素数的数称为合数.1和0既非素数也非合数.质数是与合数相对立的两个概念 ...

  5. Java程序中如何判断一个数是否为素数

    文章目录 一.素数是什么? 二.思考步骤 1.满足定义:拿一个数看能不能被1和它本身整除,对吗?? 2.先说说1-100以内的素数如何输出: **那么怎么变成判断输入的一个数是不是素数呢??** 总结 ...

  6. 使用python判断一个数是否为素数

    如何用python判断一个数是否为素数? 是否为素数可以通过逐个检查从2到它本身的数是否整除来解决. 先创建一个空列表,使用for把2到它本身的数添加进去.创建变量prime来存储返回值.再使用一个f ...

  7. Javascript 判断一个数是否为素数的三种解法

    判断一个数是否为素数(质数):只能被1和其本身整除的数. 方案一:只有两个因子 (计算因子的个数是否是2,如果是2,是素数) 方案二:因子之和  ==  该数 + 1 方案三:通过一个开关控制该数是否 ...

  8. 用js函数判断一个数是否为素数

    //判断一个数是否是素数 function zhishu (n) { var zhishu = true;//假设是质数 for(var i = 2;i < n/2; i++) { if(n % ...

  9. python中判断一个数是否为素数_【转载】Python脚本判断一个数是否为素数的几种方法...

    质数又称素数.指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数.素数在数论中有着很重要的地位.比1大但不是素数的数称为合数.1和0既非素数也非合数.质数是与合数相对立的两个概念 ...

最新文章

  1. 【CV】10种轻量级人脸检测算法大PK | 代码集合开源
  2. linux 工具src,10个被称为Sysadmin的Linux工具
  3. 人脸识别 性能评价指标
  4. 谷歌技术主管:当我们选择工作时,什么最重要?
  5. PAT甲级题目翻译+答案 AcWing(字符串处理)
  6. python都有什么包_常用的Python包有哪些,如何快速掌握Python编程
  7. msgpack java lua_使用lua-cmsgpack序列化和反序列化lua对象
  8. 正则表达式——获取指定IP的物理地址(二)
  9. 相机标定(2)opencv2实现
  10. MySQL启动异常Starting MySQL.The server quit without .
  11. android电源管理
  12. 基于SQL Server策略的管理–类别和数据库订阅
  13. C语言家谱管理程序,C语言实现家谱管理
  14. 2019.2.2牛客寒假算法基础集训营
  15. 计算机网络七版pdf
  16. Google Earth Engine谷歌地球引擎GEE栅格数据图层可视化设置代码嵌入
  17. 数据探索(数据特征分析)④—Python分布分析、对比分析、统计量分析、期性分析、贡献度分析、相关性分析
  18. 生日快乐祝福。我遇见你 都是人间最好的事
  19. 【平面解析几何】直线方程的表示形式
  20. 新来个技术总监要我做一个 IP 属地功能~

热门文章

  1. Getting Icon Overlays to Work
  2. 唯快不破,2019最快的固态硬盘(SSD)大盘点,绝对值得收藏
  3. apple tv 开发_现在是购买Apple TV的好时机吗?
  4. 约单APP——互联网创业好项目
  5. 15_串口中断通信寄存器即库函数配置编写实例
  6. 还在玩《钢琴大师》吗?自己在家动手做一个出来!(基于C+EasyX 实现)
  7. 将jar添加到本地仓库及上传Jar到远程marven仓库
  8. HDU 5544 Ba Gua Zhen ( 2015 CCPC 南阳 C、DFS+时间戳搜独立回路、线性基 )
  9. pixhawk飞控架构
  10. 微信公众号上拉加载下拉刷新