求素数的三种方法(Java实现)
文章目录
- 作业标题
- 一、常规方法(最低效)
- 思路说明:
- 缺点:
- 二、稍微高效的方法(x/2)
- 思路说明:
- 缺点:
- 三、高效方法(根号x)
- 思路说明:
作业标题
给定一个数字,判定一个数字是否是素数。
素数又叫质数,质数是指在大于1的自然数中,除了1和它本身以外,不能被其他自然数整除的数。最小的质数是2,它也是唯一的偶数质数,最前面的质数依次排列为:2、3、5、7、11、13、17、19、23、29、31等。
第一种方法是我自己做作业时想到的,但是随着只是不断深入,我们还是要尽可能的将每个解法做到高效。
一、常规方法(最低效)
思路说明:
从而开始,一旦出现能整除的,就表示不是素数,如果从二开始到她本身之前都没有整除的,说明就是素数,这一解法从数组本身的定义出发的。
缺点:
当数字较大时,循环次数太多,所以不建议使用。
public static void main(String[] args){Scanner sc=new Scanner(System.in);int a=sc.nextInt();int i=0;for(i=2;i<a;i++){if(a%i==0){break;}}if(i==a){System.out.println(a+"是素数");}else{System.out.println(a+"不是素数");}sc.close();}
运行结果:
二、稍微高效的方法(x/2)
思路说明:
将循环范围定在2到指定数的二分之一(原理:任何一个数的最大因数都小于等于它的二分之一,所以只要从2查找到x/2,如果都没有被整除就是素数,因为到这里已经查找到他的最大因数了。例如24的最大因数为12,100的最大因数为50.)这样就会减少循环次数。
缺点:
效率提高了不少,但也并不是最优解。
代码如下(示例):
public static void isPrime2(int x){boolean flag;int i=0;int j=0;flag=true;for(j=2;j<=x/2;j++){if(x%j==0){flag=false;break;}}if(j>x/2){System.out.println("是素数");}else{System.out.println("不是素数");}}public static void main(String[] args) {isPrime2(17);}
三、高效方法(根号x)
思路说明:
其实只要把循环一直从2尝试到根号x就可以,不难发现,一个数的两个因数中,毕然有一个小于等于根号x,一个大于等于根号x,例如100的因数有:1和100,2和50,4和25,5和20,10和10.所以只要从2尝试到根号x,如果都没有被整除,就是素数,否则就不是。和第二种方法类似,但是效率相对更高,推荐使用。
public static void isPrime1(int x){boolean flag;int i=0;int j=0;flag=true;for(j=2;j<=Math.sqrt(x);j++){if(x%j==0){flag=false;break;}}if(j>Math.sqrt(x)){System.out.println("是素数");}else{System.out.println("不是素数");}}public static void main(String[] args) {isPrime1(17);}
求素数的三种方法(Java实现)相关推荐
- 【数论】求素数的三种方法
素数的定义 素数也叫质数.一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做素数:否则称为合数(规定1既不是质数也不是合数). 一.试除法(判断素数) 试除法顾名思义就是用 2 到 n ...
- java中隐函数求导法则_隐函数求导的三种方法
this.p={ m:2, b:2, loftPermalink:'', id:'fks_085075084086088070081083074065081087082066093087080', b ...
- python求平方根的三种方法
python求平方根的三种方法 题干描述 题目解答 题干描述 没啥好说的qwq,求根号下x,并舍弃小数部分,只保留整数 题目解答 方法一:不多bb,直接0.5次方(这应该是最没有营养的解法,面试官估计 ...
- 求最小公倍数的三种方法(C语言)
求最小公倍数的三种方法 1.常规暴力求解法 2.辗转相除法 3.迭乘法 //1.常规暴力求解法 #include <stdio.h> int main() {int a = 0;int b ...
- C语言求最大公约数三种方法详解
C语言求最大公约数三种方法详解 题目要求 常用写法(穷举法) 辗转相减法 辗转相除法 main函数 整体代码 题目要求 运行最大公约数的常用算法,并进行程序的调式与测试. 常用写法(穷举法) 从两个数 ...
- php判断质数,php如何判断是否为素数?判断素数的三种方法(代码示例)
本篇文章给大家带来的内容是介绍php如何判断是否为素数?判断素数的三种方法(代码示例).有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 什么是素数? 质数又称素数.一个大于1的自然数 ...
- 求素数的几种方法(通俗易懂)
博主简单的写下这篇文章,主要为了更好地复习和理解,希望对各位有帮助. 素数:指一个只能被1和它本身整除的数. 青铜级别求素数:枚举范围内的每个数在2到本身的范围中是否有被整除的数.没有就是素数,有就不 ...
- C语言求幂的三种方法
用三种方法求幂值 一. 暴力递归 直接对x乘y次 int result(int x,int y) {int num=1;for (int i=1; i<=y; i++) {num*=x;}ret ...
- c语言程序π,C语言求圆周率π(三种方法)
题目1) 利用公式①计求π的近似值,要求累加到最后一项小于10^(-6)为止. 题目2) 根据公式②,用前100项之积计算π的值. 题目1)提供了一种解法,题目2)提供了两种解法,请看解析. 题目1) ...
- c语言求圆周率 . 4,C语言求圆周率π(三种方法)(4页)-原创力文档
C语言求圆周率π(三种方法) 题目1) 利用公式①计求π的近似值,要求累加到最后一项小于10^(-6)为止.题目2) 根据公式②,用前100项之积计算π的值.题目1)提供了一种解法,题目2)提供了两种 ...
最新文章
- ganglia metric 默认监控项翻译
- Linux下C语言程序的内存布局(内存模型)
- factorybean 代理类不能按照类型注入_Spring注解驱动开发之四——@Import快速导入组件、FactoryBean 定义工厂注册组件...
- Map集合HashMap TreeMap的输出方法
- 从框架源码中学习创建型设计模式
- c查看变量类型_C语言的变量、常量及运算
- java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
- molicode生成vue增删改查功能
- JavaEE Tutorials (25) - 使用Java EE拦截器
- ssh: connect to host port 22: Connection refused
- e480Linux无法发现无线网卡,ThinkPad无线不能用无法连接无线网络的具体排查流程图解...
- Windows强制关机之后,自动修复失败,无法开机的问题解决
- 网易云音乐、微博成新规后首批IPO企业 招股书披露数据安全风险
- 计算机无法识别ipad,电脑无法识别iphone、ipad怎么办
- 查互联网ip(公网ip)
- 小学生计算机认识ppt,小学生认识计算机概要.ppt
- 机器学习笔试精选 100 题
- uniapp爱玩小灰视频播放器使用流程
- 条件极值例题_条件极值与函数习题课.doc
- java 整数相除 小数点_java整数相除保留小数
热门文章
- 要是面试官再问我synchronized,我就这么答
- git add 所有修改文件_Git的安装及创建版本库
- 一纬度横直线等于多公里_高中物理必修一、必修二知识点提纲,暑期预习必备...
- TCP四次握手断开连接(图解)
- ApacheCN Python 译文集 20211108 更新
- 大学计算机一级准考证打印,河海大学计算机等级考试准考证打印入口
- Delphi XE 10.2.3如何添加PDF阅读器组件
- JAVA实现的小程序
- 用java语言写一个实用小程序_用java语言,编写一个小程序。
- matlab 自动交易系统设计2