看别人的时候没看懂,自己写的时候想了想就明白了,也添上注释发出来。
注释纯粹个人理解。
/**4.大范围内判断一个数是否为质数
* Prime number
* 设置一个开关,1~sqrt(n)之间的非质数设为关状态
* 最后还是用mod 1~sqrt(n 之间的质数判断。
* 条件 n为整数,可能对小的数有问题
* @author gdcic-zhang
*/
public boolean isPrime2(int n){
boolean result=true;
int end=(int) Math.sqrt(n);
BitSet b=new BitSet(end);//开关
int i;
for(i=2;i<end;i++){
b.set(i);//所有为处于打开状态,
}
i=2;
while(i*i<end){
if(b.get(i)){
for(int k=i;k<b.size();k+=i){
b.clear(i);
}
}
i++;
}
for(i=2;i<end;i++){
if(b.get(i)){
if(n%i==0){
result=false;
break;
}
}
}
return result;
}