Java代码实现—寻找素数
目录
1、什么是素数
2、代码1
3、代码2(n/2)
4、代码3(sqrt(n))
5、代码4(函数实现)
6、结语
1、什么是素数
- 首先我们要知道什么是素数,下面是百度百科的解释,素数又称质数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
- 我们换成代码的语言就是:数字本身n,与除了1和它本身的数字相除(/),都不能整除,即为素数,那么我们很自然的想到了代码1的方法。
2、代码1
- 代码1的逻辑为,我们用一个循环,生成一个2>并且n<的数字,让我们的数字n,分别与这些数字做取余(%)操作,如果结果是0,那么证明数字n除了1和他本身,还有其他的因子,即不是素数;反之则是素数。
public static void main(String[] args) {int n = 7;int i = 2;for (; i < n; i++) {if(n % i == 0) {System.out.println("不是素数!");break;}}//1、i==n 2、n%i==0if(i == n) {System.out.println("是素数!");}}
注意:
- 在这个代码中,有两个条件均可以将代码执行到if(i == n)的地方:其一是for循环正常运行结束(i == n,不满足for循环条件了),
- 其二是 n % i这个判断成立,代码执行break,跳出for循环。
- 所以我们这里要判断i是否等于n,以排除第二种情况,证明是for循环正常结束,即没有找到除1和本身以外的因子,这时候打印“是素数”。
3、代码2(n/2)
- 上面的代码中我们发现:要判断这个数字是不是素数,我们至少需要运行n-2次,我们是否能改进一下这个代码呢?答案是肯定的,我们发现非素数的数字,比如:16 = 2 * 8;其中因子一定有小于n/2的数字,所以我们for循环的条件就可以改成 i <n / 2
public static void main(String[] args) {int n = 9;int i = 2;for (; i <= n/2; i++) {if(n % i == 0) {System.out.println("不是素数!");break;}}if(i > n/2) {System.out.println("是素数!");}}
注意:
- 代码2中for循环的次数明显比代码1要少了一半,代码效率提升。
- 代码2中判断 if(i > n/2)这个条件与代码1中的情况一样,为了排除break的干扰,而是for循环正常运行到这里的结果。
4、代码3(sqrt(n))
- 在代码2的基础上,我们发现一个非素数,如:16 = 2 * 8;其中总有一个因子是小于根号n的,我们利用这一特性,设置了代码3:
public static void main(String[] args) {for (int j = 1; j < 101; j++) {//int n = 19;int i = 2;for (; i <= Math.sqrt(j); i++) {if(j % i == 0) {//System.out.println("不是素数!");break;}}if(i > Math.sqrt(j)) {System.out.println(j+" 是素数!");}}}
注意:
- 代码3比代码2的运行效率更高,因为代码3,for循环的次数在i运行到根号n的时候就停止了。
- Java中调用数学公式要用Math.来调用,这里的sqrt是取根号的意思。
- 最后的if(i > Math.sqrt(j))与上述的两个代码逻辑一致,这里不再赘述。
5、代码4(函数实现)
- 代码5提供一种函数的方法,使得代码更加的简单
public static boolean isPrime(int n) {int i = 2;for (; i <= Math.sqrt(n); i++) {if(n % i == 0) {return false;}}if(i > Math.sqrt(n)) {return true;}}
- 主函数中,只要判断isPrime函数返回的是false还是true来打印出来是不是素数即可,使得代码看起来更加的简洁。
6、结语
我们可以发现寻找一个素数的方法,我们优化了4种方法来实现它,在今后的代码中,也希望大家能够举一反三,一起加油!!
喜欢本次blog的铁铁们,麻烦给个一键三连!
Java代码实现—寻找素数相关推荐
- 用java语编写求素数程序_java求素数代码
public static void main(String args[]) { int i,n,flag; { 1.程序分析:判断素数的方法:用一个数分别去除 2 到 sqrt(这个数),如果能被整 ...
- Java拆解最多的素数之和_java - 计算并打印第n个素数 - 堆栈内存溢出
为了计算第n个素数,我知道两个主要的变体. 直截了当的方式 也就是说,从找到的所有素数开始计数,直到找到所需的n th为止. 这可以通过不同程度的复杂性和效率来完成,并且在概念上有两种不同的实现方式. ...
- Java代码缺陷自动分析工具介绍
Java代码缺陷自动分析工具介绍 ...
- java代码打包成jar以及转换为exe
教你如何把java代码打包成jar文件以及转换为exe可执行文件 1.背景: 学习java时,教材中关于如题问题,只有一小节说明,而且要自己写麻烦的配置文件,最终结果却只能转换为jar文件.实在是心有 ...
- 提高 Java 代码质量
高质量代码中往往缺陷更少!确保高的 Java 代码质量有两个步骤:尽早并经常地编写各个层次的测试用例,以及持续的监测质量状况.那么我们又该如何实践呢?本专题汇集了大量来自代码质量专家们的专业经验.最佳 ...
- 买什么数据结构与算法,这里有:动态图解十大经典排序算法(含JAVA代码实现)
上篇的动图数据结构反响不错,这次来个动图排序算法大全.数据结构与算法,齐了. 几张动态图捋清Java常用数据结构及其设计原理 本文将采取动态图+文字描述+正确的java代码实现来讲解以下十大排序算法: ...
- java array 元素的位置_数据结构与算法:动态图解十大经典排序算法(含JAVA代码实现)...
点击上方"JAVA",星标公众号 重磅干货,第一时间送达 本文将采取动态图+文字描述+正确的java代码实现来讲解以下十大排序算法: 冒泡排序 选择排序 插入排序 希尔排序 归并排 ...
- eclipse关闭java程序_如何为Java代码的某些部分关闭Eclipse代码格式化程序?
我有一些Java代码,其中SQL语句编写为Java字符串(请不要使用OR / M flamewars,嵌入式SQL就是这样 - 不是我的决定) . 为了便于维护,我在几行代码中将SQL语句在语义上分解 ...
- java考察代码_一段简单的关于字符串的 Java 代码竟考察了这么多东西
下面的代码运行结果是什么?解释一下为什么会有这些差异. String s1 = "hello"; String s2 = s1 + ",world"; Stri ...
- java代码解锁华为_如何编写可怕的Java代码?
我决定告诉你如何编写可怕的Java代码.如果你厌倦了所有这些美丽的设计模式和最佳实践,并且想写些疯狂的东西,请继续阅读. 如果你正在寻找有关如何编写良好代码的建议,请查看其它文章! 对一切使用异常 你 ...
最新文章
- B站QUIC实践之路
- html5 轮询自动刷新数据,后台调用exe,前端定时轮询调用结果
- SVN查看提交日志的命令
- pictureselector 压缩_Android 多图选择器PictureSelector 使用
- 开启服务器时启动线程
- swift 动画合集
- OpenLayers自定义投影,转换OpenLayers中加载的OSM的默认投影坐标
- 【python】画四叶草
- C++练习实例———控制台实现坦克大战小游戏
- win10计算机系统优化设置,win10加速优化的方法是什么_windows10优化设置的方法
- Stepping Number
- SAP系统管理的常用T-CODE
- 在win7系统 Keil 开发环境下 Jlink 仿真器连不上解决办法
- js 获取昨天的日期 getDay()方法
- 浩辰CAD参考图剪辑编辑
- 南邮 OJ 1596 日历
- R语言读取Excel表格数据并绘制多系列柱状图、条形图
- python处理金融数据_Python之获取与简单处理金融数据
- java微服务项目简历_Spring Cloud及微服务简介
- 如何注册Vizio的AirPlay Beta