import java.util.Scanner;
public class PrimeNum {
public static void main(String[] args) {
Scanner AAA = new Scanner(System.in);
int maxNum = AAA.nextInt();//输入最大范围
long start = System.currentTimeMillis();
int count = 0;//计数器
label1:
for(int i=2;i<=maxNum;i++) {
if(i%(Math.sqrt(i))==0) {
//当这个数为任何数的次方时判断为非质数 如8281 是91*91
continue label1;
}
for(int j=2;j<=i;j++) {
if(i%j==0) {
if(i==j) {
System.out.print(i+"\t");//输出质数
count++;
if(count==10) {//计数器为10时换行并重置计数器
System.out.println();
count=0;
}
continue label1;
}else {
continue label1;//如不是质数则直接跳过下面的判断语句
}
}else {
/*
* 当上面的判断无法快速得出结论时 如29
* 迭代因子必须叠加到29时才能判断其是否为质数
* 但是当迭代因子大于它的一半时就可得出结论
* 因为迭代因子再往上叠加不可能被这个数除尽
* 所以当迭代因子大于这个数的一半时可以直接判断其为质数
*/
if(j>(i/2)) {
System.out.print(i+"\t");
count++;
if(count==10) {
System.out.println();
count=0;
}
continue label1;
}
/*
* 同理 当数字大于1w或者10w时可以通过迭代因子是否大于1000来判断是否还能被整除
* 因为1000*1000=100w
*/
if(j>Math.sqrt(maxNum)) {
System.out.print(i+"\t");
count++;
if(count==10) {
System.out.println();
count=0;
}
continue label1;
}
}
}
}
long end = System.currentTimeMillis();
System.out.println();
System.out.print("耗时"+(end-start)+"ms");//耗时663ms
}
}
[练习]快速算出1到100万之间的素数
猜你喜欢
转载自blog.csdn.net/africanhusky/article/details/81086507
今日推荐
周排行