例题三:求十万以内所有质数
终于见识到了算法的强大之处。来看下吧!
//求十万以内的质数
public class Prime{
public static void main(String[] args){
System.out.println("实验开始!");
long t1=System.currentTimeMillis();
prime1(100000);
prime2(100000);
prime3(100000);
long t2=System.currentTimeMillis();
System.out.println("总耗时:"+(t2-t1)+"ms");
}
//没有break
public static void prime1(int num){
boolean pflag=true;
int pcount=0;
long t1=System.currentTimeMillis();
for(int i=2;i<=num;i++){
for(int j=2;j<i;j++){
if(i%j == 0){
pflag=false;
}
}
if(pflag){
pcount++;
}
pflag=true;
}
long t2=System.currentTimeMillis();
System.out.println("方法一质数个数:"+pcount);
System.out.println("方法一耗时:"+(t2-t1)+"ms");
}
//只有break
public static void prime2(int num){
int pcount=0;
long t1=System.currentTimeMillis();
for(int i=2;i<=num;i++){
for(int j=2;j<=i;j++){
if(i==j){
pcount++;
}else if(i%j == 0){
break;//优化一
}
}
}
long t2=System.currentTimeMillis();
System.out.println("方法二质数个数:"+pcount);
System.out.println("方法二耗时:"+(t2-t1)+"ms");
}
//增加开方
public static void prime3(int num){
boolean pflag=true;
int pcount=0;
long t1=System.currentTimeMillis();
for(int i=2;i<=num;i++){
for(int j=2;j<=Math.sqrt(i);j++){//优化二
if(i%j == 0){
pflag=false;
break;//优化一
}
}
if(pflag){
pcount++;
}
pflag=true;
}
long t2=System.currentTimeMillis();
System.out.println("方法三质数个数:"+pcount);
System.out.println("方法三耗时:"+(t2-t1)+"ms");
}
}
结果
初来乍到,请多关照!