文章目录

  • Java输出100以内的质数
  • 重点:<代码的优化>
    • P1:currenttimemillis方法计算运行时间
    • p2:优化一(针对非质数)
    • p3:Java 中 Math.sqrt()方法(开平方)
    • p4:优化二(针对质数)
    • P5:优化后最终结果

⭕️前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家(点击跳转到网站)⭕️


Java输出100以内的质数

质数:素数,只能被1和他本身整除的自然数(最小质数为2)

答案代码:

package qiantaoxunhuan;public class E {public static void main(String[] args) {//boolean isFlag=true;//标识i是否被j除尽,一旦除尽,修改其值for (int i = 2; i <=100 ; i++) {//遍历100以内自然数boolean isFlag=true;//标识i是否被j除尽,一旦除尽,修改其值for (int j = 2; j <i ; j++) {if (i%j==0){//i被j除尽isFlag=false;}}if (isFlag==true){System.out.println(i);}//重置isFlage//isFlag=true;}}
}

注解:这里的第7行代码,对isFlage的定义可以放在循环体外面,然后在打印数据之后进行一次重置,这样虽然代码复杂一点,但节约了内存


重点:<代码的优化>

P1:currenttimemillis方法计算运行时间

描述:public static long currentTimeMillis()返回当前时间(以毫秒为单位)。 请注意,虽然返回值的时间单位为毫秒,但该值的粒度取决于底层操作系统,并且可能较大。 例如,许多操作系统以几十毫秒为单位测量时间。
有关“计算机时间”和协调世界时间(UTC)之间可能出现的轻微差异的讨论,请参阅类别Date的说明。
在1970年1月1日UTC之间的当前时间和午夜之间的差异,以毫秒为单位。

p2:优化一(针对非质数)
package qiantaoxunhuan;public class E2 {public static void main(String[] args) {boolean isFlag=true;long start = System.currentTimeMillis();//获取当前时间距离1970年1月1日UTC的毫秒数for (int i = 2; i <=100000; i++) {for (int j = 2; j <i; j++) {if (i%j==0){isFlag=false;break;//优化一:只对本身非质数的自然是是有效的}}if (isFlag==true){System.out.println(i);}isFlag=true;//重置isFlage}long end = System.currentTimeMillis();//获取当前时间距离1970年1月1日UTC的毫秒数System.out.println("所花费的时间为"+(end-start));}
}

注解:在代码中的if判断语句位置,当判断出被除尽之后,加上break,这样的话本身非质数的自然数被判定出来之后,便不在进行后续的计算,这里将数据基数改为10万,而不是100了,不然优化之后的时间差不明显(如下)

优化前

优化后

这里不难看出,当数据基数较大时,优化后比优化前时间少很多很多

p3:Java 中 Math.sqrt()方法(开平方)

描述:public static double sqrt(double a)返回double值正确舍入的正平方根。 特殊情况:

  • 如果参数为NaN或小于零,则结果为NaN。
  • 如果参数为无穷大,则结果为正无穷大。
  • 如果参数为正零或负零,则结果与参数相同。

否则,结果是double最接近参数值的真实数学平方根值。
参数
a - 一个值。
结果
正平方根a 。 如果参数为NaN或小于零,则结果为NaN。

p4:优化二(针对质数)
package qiantaoxunhuan;public class E2 {public static void main(String[] args) {boolean isFlag=true;long start = System.currentTimeMillis();//获取当前时间距离1970年1月1日UTC的毫秒数for (int i = 2; i <=100000; i++) {for (int j = 2; j <=Math.sqrt(i); j++) {//优化二:判断一个数是否是素数,只要除到那个数开根号就够了if (i%j==0){isFlag=false;// break;//优化一:只对本身非质数的自然是是有效的}}if (isFlag==true){System.out.println(i);}isFlag=true;//重置isFlage}long end = System.currentTimeMillis();//获取当前时间距离1970年1月1日UTC的毫秒数System.out.println("所花费的时间为"+(end-start));}
}

问题:判断一个数是否是素数,为什么只要除到根号那个数就够了?

:一个数n如果不是素数那么一定存在若干因子(不少于2个),

假设最小的因子是p,那么p*p <= n

所以得: p < = 根 号 n

结论:

这里就不截图了,数据大概如下(这里便于观察差距,数据仍然为10万,break的优化注释掉了)
优化前大概:13005

优化后大概:190

  • 不难看出,这次的优化,时间节省上已经完全不是一个量级
P5:优化后最终结果
package qiantaoxunhuan;public class E2 {public static void main(String[] args) {boolean isFlag=true;long start = System.currentTimeMillis();//获取当前时间距离1970年1月1日UTC的毫秒数for (int i = 2; i <=100000; i++) {for (int j = 2; j <=Math.sqrt(i); j++) {//优化二:判断一个数是否是素数,只要除到那个数开根号就够了if (i%j==0){isFlag=false;break;//优化一:只对本身非质数的自然是是有效的}}if (isFlag==true){System.out.println(i);}isFlag=true;//重置isFlage}long end = System.currentTimeMillis();//获取当前时间距离1970年1月1日UTC的毫秒数System.out.println("所花费的时间为"+(end-start));}
}

运行结果:

总结论:综上所述可以看见质数输出的算法优化之后,效率提高了之后完全不是一个量级

Java输出100以内的质数(及其代码优化详程)相关推荐

  1. 输出100以内的质数 java

    java输出100以内的质数 class Ab{public static void main(String[] args){boolean isFlag = true; //标识i是否能被j除尽,一 ...

  2. Linux质数合数的脚本,python输出100以内的质数与合数实例代码

    python输出100以内的质数与合数实例代码 具体代码如下所述: __author__ = 'Yue Qingxuan' # -*- coding: utf-8 -*- #求质数 p=[2] for ...

  3. python100以内自然数之和_python输出100以内的质数与合数实例代码

    具体代码如下所述: __author__ = 'Yue Qingxuan' # -*- coding: utf-8 -*- #求质数 p=[2] for i in range(2,101): for ...

  4. python中求合数_python输出100以内的质数与合数实例代码

    具体代码如下所述: __author__ = 'Yue Qingxuan' # -*- coding: utf-8 -*- #求质数 p=[2] for i in range(2,101): for ...

  5. python输出1到100之间的合数_python输出100以内的质数与合数实例代码

    具体代码如下所述: __author__ = 'Yue Qingxuan' # -*- coding: utf-8 -*- #求质数 p=[2] for i in range(2,101): for ...

  6. 用Java输出100内的质数和合数(包含100)

    目录 前言: 1.用Java输出100内的质数 2.用Java输出100内的合数 补充一下: 前言: 质数的概念:除了1和它本身以外不再有其它的因数,这个数就是质数. 合数的概念:除了1和它本身以外还 ...

  7. python100以内的质数_python输出100以内的质数与合数实例代码

    具体代码如下所述: __author__ = 'Yue Qingxuan' # -*- coding: utf-8 -*- #求质数 p=[2] for i in range(2,101): for ...

  8. js输出100以内的质数_JavaScript 斐波那契数列 倒序输出 输出100以内的质数代码实例...

    这篇文章主要介绍了JavaScript 斐波那契数列 倒序输出 输出100以内的质数代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 斐波那契 ...

  9. java练习 输出100以内的质数

    /** 打印出100以内的质数,一行显示5个,* (质数是只能被1跟自身整除的数,1不是质数)*/ public class Test11 {static boolean isPrime(int nu ...

最新文章

  1. 十字星编程c语言,C语言求完整的代码
  2. c++ 类的继承与派生
  3. 计算机u打字,win7电脑打字打不出来怎么办
  4. 当我的master被fork后,我把master删了,然后我就成了他人的bitch
  5. 基于HT for Web的Web SCADA工控移动应用
  6. 物联网专用卡的优势有哪些
  7. 一款非常萌的桌面工具---bongo cat mver0.1.6 附使用教程
  8. discuz模板文件说明
  9. JavaScript网页设计:用户登录页面
  10. ThinkPHP 的 Vender的简单实用
  11. 留得些许清影,幽香直到人间
  12. ESP32基于arduino开发的心跳体温检测系统(一)项目介绍及准备
  13. 学籍管理系统制作教程第一天
  14. dialog出现Uncaught RangeError: Maximum call stack size exceeded错误
  15. python 常用转义字符对照表 键盘各键对应的ASCII码值
  16. “华为杯”山东理工大学第十一届ACM程序设计竞赛 E - 九连环
  17. C++语言篇 字符串及字符数组练习
  18. PyTorch GPU计算
  19. 圣诞节品牌推广:5大海外网红营销案例分享
  20. 再快一点?动态内容如何加速

热门文章

  1. 2018知乎live
  2. 献给喜欢落网的朋友们
  3. 分享四个特别好用的app,真的太好用了
  4. 安防监控实现之控制命令下发(命令下发--html通过CGI与用户进程交互)
  5. 轻松易懂arduino低功耗BLE蓝牙通信
  6. 联想ghost重装系统_通用PE工具箱装系统(V6.3)-安装Ghost版XP、WIN7系统
  7. 预测神经胶质瘤基因型的多模态学习
  8. 医用无线服务器,上海医用显示屏
  9. 关于安卓自定义图片选择库的实现
  10. CSS布局设置如何才能做到左边滑动右边不动,右边滑动左边不动