目录

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("是素数!");}}

注意:

  1. 在这个代码中,有两个条件均可以将代码执行到if(i == n)的地方:其一是for循环正常运行结束(i == n,不满足for循环条件了),
  2. 其二是 n % i这个判断成立,代码执行break,跳出for循环
  3. 所以我们这里要判断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("是素数!");}}

注意:

  1. 代码2中for循环的次数明显比代码1要少了一半,代码效率提升
  2. 代码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+" 是素数!");}}}

注意:

  1. 代码3比代码2的运行效率更高,因为代码3,for循环的次数在i运行到根号n的时候就停止了
  2. Java中调用数学公式要用Math.来调用,这里的sqrt是取根号的意思。
  3. 最后的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代码实现—寻找素数相关推荐

  1. 用java语编写求素数程序_java求素数代码

    public static void main(String args[]) { int i,n,flag; { 1.程序分析:判断素数的方法:用一个数分别去除 2 到 sqrt(这个数),如果能被整 ...

  2. Java拆解最多的素数之和_java - 计算并打印第n个素数 - 堆栈内存溢出

    为了计算第n个素数,我知道两个主要的变体. 直截了当的方式 也就是说,从找到的所有素数开始计数,直到找到所需的n th为止. 这可以通过不同程度的复杂性和效率来完成,并且在概念上有两种不同的实现方式. ...

  3. Java代码缺陷自动分析工具介绍

    Java代码缺陷自动分析工具介绍                                                                                     ...

  4. java代码打包成jar以及转换为exe

    教你如何把java代码打包成jar文件以及转换为exe可执行文件 1.背景: 学习java时,教材中关于如题问题,只有一小节说明,而且要自己写麻烦的配置文件,最终结果却只能转换为jar文件.实在是心有 ...

  5. 提高 Java 代码质量

    高质量代码中往往缺陷更少!确保高的 Java 代码质量有两个步骤:尽早并经常地编写各个层次的测试用例,以及持续的监测质量状况.那么我们又该如何实践呢?本专题汇集了大量来自代码质量专家们的专业经验.最佳 ...

  6. 买什么数据结构与算法,这里有:动态图解十大经典排序算法(含JAVA代码实现)

    上篇的动图数据结构反响不错,这次来个动图排序算法大全.数据结构与算法,齐了. 几张动态图捋清Java常用数据结构及其设计原理 本文将采取动态图+文字描述+正确的java代码实现来讲解以下十大排序算法: ...

  7. java array 元素的位置_数据结构与算法:动态图解十大经典排序算法(含JAVA代码实现)...

    点击上方"JAVA",星标公众号 重磅干货,第一时间送达 本文将采取动态图+文字描述+正确的java代码实现来讲解以下十大排序算法: 冒泡排序 选择排序 插入排序 希尔排序 归并排 ...

  8. eclipse关闭java程序_如何为Java代码的某些部分关闭Eclipse代码格式化程序?

    我有一些Java代码,其中SQL语句编写为Java字符串(请不要使用OR / M flamewars,嵌入式SQL就是这样 - 不是我的决定) . 为了便于维护,我在几行代码中将SQL语句在语义上分解 ...

  9. java考察代码_一段简单的关于字符串的 Java 代码竟考察了这么多东西

    下面的代码运行结果是什么?解释一下为什么会有这些差异. String s1 = "hello"; String s2 = s1 + ",world"; Stri ...

  10. java代码解锁华为_如何编写可怕的Java代码?

    我决定告诉你如何编写可怕的Java代码.如果你厌倦了所有这些美丽的设计模式和最佳实践,并且想写些疯狂的东西,请继续阅读. 如果你正在寻找有关如何编写良好代码的建议,请查看其它文章! 对一切使用异常 你 ...

最新文章

  1. B站QUIC实践之路
  2. html5 轮询自动刷新数据,后台调用exe,前端定时轮询调用结果
  3. SVN查看提交日志的命令
  4. pictureselector 压缩_Android 多图选择器PictureSelector 使用
  5. 开启服务器时启动线程
  6. swift 动画合集
  7. OpenLayers自定义投影,转换OpenLayers中加载的OSM的默认投影坐标
  8. 【python】画四叶草
  9. C++练习实例———控制台实现坦克大战小游戏
  10. win10计算机系统优化设置,win10加速优化的方法是什么_windows10优化设置的方法
  11. Stepping Number
  12. SAP系统管理的常用T-CODE
  13. 在win7系统 Keil 开发环境下 Jlink 仿真器连不上解决办法
  14. js 获取昨天的日期 getDay()方法
  15. 浩辰CAD参考图剪辑编辑
  16. 南邮 OJ 1596 日历
  17. R语言读取Excel表格数据并绘制多系列柱状图、条形图
  18. python处理金融数据_Python之获取与简单处理金融数据
  19. java微服务项目简历_Spring Cloud及微服务简介
  20. 如何注册Vizio的AirPlay Beta

热门文章

  1. 2021年高考成绩查询海南时间,2021年海南高考后多久出成绩,附海南高考成绩查询时间入口方式...
  2. 一个Windows C++的线程池类实现
  3. update set命令用来修改表中的数据
  4. CSDN程序员研修院课程无法下载
  5. 如何搭建一个自己的网站-项目篇
  6. css里禁用样式,禁用某些元素的CSS样式
  7. java开发转测试开发经历
  8. 常用的数据库软件各自有什么特点?
  9. VM Workstation 12.0+ 参考序列号及linux系统推荐
  10. 学生管理系统总结(c语言)