计算质数
质数的定义:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
这里有实现求取质数的方法,以及对传统算法的优化,并通过时间差来显示优化的效果
package com.helloworld.java;
public class HelloWorld {
public static void main(String[] args){
boolean isFlag = true;
// 获取当前的时间
long start = System.currentTimeMillis();
// 这里计算2-100000,是为了比较算法的优化效果
for(int i =2;i<=100000;i++){
//优化二
//for(int j = 2;j <= Math.sqrt(i);j++){
for(int j = 2;j <i;j++){
if(i % j == 0){
isFlag = false;
//优化一
//break;
}
}
if(isFlag){
System.out.println(i);
}
isFlag = true;
}
// 获取计算完之后的时间
long end = System.currentTimeMillis();
System.out.println("该算法运行的时间为:" + (end - start) + "ms");
}
}
该算法运行的时间为:13688ms
该算法运行的时间为:1300ms
该算法运行的时间为:95ms
这里有两个优化方法,分别为优化一和优化二,已在代码中标识出来,上面代码为原始代码,优化方法注释掉了,使用时候注意更改
优化方法一:加了一个break,是对非质数的一个优化,当满足非质数条件时,不再继续判断,利用break直接退出循环,大大提高了效率
优化方法二:使用j <= Math.sqrt(i) 对质数减少了判断的范围,缩小了循环的次数,提高了效率
通过该案例即可发现算法的重要性,不同算法的执行效率是不同的,并且数据越大时,差距就越明显。