java编程查找质数代码优化

来源:互联网 发布:汤姆叔叔 javascript 编辑:程序博客网 时间:2024/06/06 03:46

      来达内培训,今天老师布置了一个作业,是关于求一个范围内的所有质数的问题,我一想,这个简单啊,以前脑子里也依稀记得一个方法,所以就嗖嗖嗖写出来了,代码如下:   


import java.util.Scanner;public class PrimeNum {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.print("请输入查找质数的范围:2~");int maxNum = scan.nextInt();int k = 0;for(int i = 2;i<=maxNum;i++){int j;for(j = 2;j<=i;j++){if(i%j ==0){break;}}if(i == j){k++;System.out.print(i+" ");if(k%10 == 0){System.out.println("\n");}}}System.out.println("\n共有"+k+"个质数");}}
然后一看,网上搜索第一个也是这样算的,好了,输入100,结果出来啦

  

结果第二天,听老师讲,我以为老师会说这个方法,没想到老师先说了质数的规律,如果要判断一个数是不是是质数,那这个数除从2到这个数的平方根之内的数就可以判断出

代码如下:

import java.util.Scanner;//开关的用法://经典案例:查找质数public class PrimeNum {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.print("请输入查找质数的范围:2~");int maxNum = scan.nextInt();int k = 0;long startTime = System.currentTimeMillis();for (int i = 2; i <= maxNum; i++) {boolean flag = true; // 先假设为质数for (int j = 2; j <= Math.sqrt(i); j++) {// for(int j = 2;j<i;j++){if (i % j == 0) {flag = false;break;}}if (flag) {k++;System.out.print(i + " ");if (k % 10 == 0) { // 每十位换一行System.out.println("\n");}}}long endTime = System.currentTimeMillis();System.out.println("\n查找用时:" + (endTime - startTime) + "毫秒");System.out.println("\n共有" + k + "个质数");}}

其中我加了一个计算程序运行时间的代码,不试不知道,于是我输入范围到10W,输出结果,首先是老师代码的用时:

然后是我那个代码用时:

差距一下就出来了!

代码的优化很重要,今天学习到了!


0 0
原创粉丝点击