判断 一个数 是不是 质数 / 素数
判断 一个数 是不是 质数 / 素数
【面试必备 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 的两个约数 p1 和 p2,其中 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+1 和 6x+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,判断一个数是不是质数。 2,选取出100以上、1000以内所有个位数字与十位数字之和被10除所得余数恰好是百位数字的素数(如293).输出上述这些素数的个数及这些素数的和.
对于大于 1 的数,如果除了 1 和它本身,它不能再被其它正整数整除,那么我们说它是一个质数.晓萌想判断一个数是不是质数,希望找你写个程序,帮助她进行判断. 输入格式 输入包括一行,为一个整数 N(1 ...
- 写一个程序判断一个数是否为素数(质数)
写一个程序判断一个数是否为素数(质数) #include<stdio.h> int zhishu(int a) { int i; int flag;//设一个flag方便判 ...
- c语言判断一个数是不是质数的n次方,c语言实践 判断一个数是不是素数
int main() { int input = 0; scanf_s("%d",&input); if (input < 2) { printf("wro ...
- python脚本判断一个数是否为素数的几种方法
质数又称素数.指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数.素数在数论中有着很重要的地位.比1大但不是素数的数称为合数.1和0既非素数也非合数.质数是与合数相对立的两个概念 ...
- Java程序中如何判断一个数是否为素数
文章目录 一.素数是什么? 二.思考步骤 1.满足定义:拿一个数看能不能被1和它本身整除,对吗?? 2.先说说1-100以内的素数如何输出: **那么怎么变成判断输入的一个数是不是素数呢??** 总结 ...
- 使用python判断一个数是否为素数
如何用python判断一个数是否为素数? 是否为素数可以通过逐个检查从2到它本身的数是否整除来解决. 先创建一个空列表,使用for把2到它本身的数添加进去.创建变量prime来存储返回值.再使用一个f ...
- Javascript 判断一个数是否为素数的三种解法
判断一个数是否为素数(质数):只能被1和其本身整除的数. 方案一:只有两个因子 (计算因子的个数是否是2,如果是2,是素数) 方案二:因子之和 == 该数 + 1 方案三:通过一个开关控制该数是否 ...
- 用js函数判断一个数是否为素数
//判断一个数是否是素数 function zhishu (n) { var zhishu = true;//假设是质数 for(var i = 2;i < n/2; i++) { if(n % ...
- python中判断一个数是否为素数_【转载】Python脚本判断一个数是否为素数的几种方法...
质数又称素数.指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数.素数在数论中有着很重要的地位.比1大但不是素数的数称为合数.1和0既非素数也非合数.质数是与合数相对立的两个概念 ...
最新文章
- 【CV】10种轻量级人脸检测算法大PK | 代码集合开源
- linux 工具src,10个被称为Sysadmin的Linux工具
- 人脸识别 性能评价指标
- 谷歌技术主管:当我们选择工作时,什么最重要?
- PAT甲级题目翻译+答案 AcWing(字符串处理)
- python都有什么包_常用的Python包有哪些,如何快速掌握Python编程
- msgpack java lua_使用lua-cmsgpack序列化和反序列化lua对象
- 正则表达式——获取指定IP的物理地址(二)
- 相机标定(2)opencv2实现
- MySQL启动异常Starting MySQL.The server quit without .
- android电源管理
- 基于SQL Server策略的管理–类别和数据库订阅
- C语言家谱管理程序,C语言实现家谱管理
- 2019.2.2牛客寒假算法基础集训营
- 计算机网络七版pdf
- Google Earth Engine谷歌地球引擎GEE栅格数据图层可视化设置代码嵌入
- 数据探索(数据特征分析)④—Python分布分析、对比分析、统计量分析、期性分析、贡献度分析、相关性分析
- 生日快乐祝福。我遇见你 都是人间最好的事
- 【平面解析几何】直线方程的表示形式
- 新来个技术总监要我做一个 IP 属地功能~
热门文章
- Getting Icon Overlays to Work
- 唯快不破,2019最快的固态硬盘(SSD)大盘点,绝对值得收藏
- apple tv 开发_现在是购买Apple TV的好时机吗?
- 约单APP——互联网创业好项目
- 15_串口中断通信寄存器即库函数配置编写实例
- 还在玩《钢琴大师》吗?自己在家动手做一个出来!(基于C+EasyX 实现)
- 将jar添加到本地仓库及上传Jar到远程marven仓库
- HDU 5544 Ba Gua Zhen ( 2015 CCPC 南阳 C、DFS+时间戳搜独立回路、线性基 )
- pixhawk飞控架构
- 微信公众号上拉加载下拉刷新