黑马程序员技术交流社区
标题:
打印不大于给定值的所有素数并计数
[打印本页]
作者:
云狐
时间:
2015-8-28 00:04
标题:
打印不大于给定值的所有素数并计数
之前写的一个小函数, 效率不咋地, 大家随便看看吧
/**
打印不大于给定值的所有素数并计数
*/
public static void printPrime(int max){
if (max<2) //最小的素数为2
return;
//素数定理: max中素数数量小于max/(ln(max)-1.5)
int length = (int)(max/(Math.log(max)-1.5));
length = (length > 2)?length:2;
int[] prime = new int[length]; //存储已获得的素数
int count = 0;
System.out.print(2+"\t");
a: for (int i=3; i<=max; i+=2){ //除2外所有素数都为奇数
for (int j=0; j<count && prime[j]*prime[j]<=i; j++){
if (i%prime[j] == 0) //判断是否是素数
continue a;
}
System.out.print(i+"\t");
prime[count++] = i;
}
System.out.println();
System.out.println("小于"+max+"的质数数量: "+(count+1));
}
复制代码
3.jpg
(259.39 KB, 下载次数: 51)
下载附件
2015-8-28 00:02 上传
不打印只计数的话可以快一些
2.png
(1.54 KB, 下载次数: 32)
下载附件
2015-8-28 00:02 上传
作者:
云狐
时间:
2015-8-28 00:09
计算运行时间的话用的是这个
public static void main(String[] args){
long start = System.currentTimeMillis();
printPrime(10000000);
long end = System.currentTimeMillis();
System.out.println("程序运行时间: "+(end-start)+"ms");
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2