筛选法得到N范围内的所有素数
获得N范围内的所有素数有很多种方式,其中比较容易想到的一种解决方案如下:
public String findAllPrimer(int num){
int num =100;
StringBuffer sb = new StringBuffer();
for(int i=2;i < num ;i++){
boolean count = true;
for(int j=2;j <= i/2;j++){
if((i % j) == 0){
count = false;
break;
}
}
if(count){
sb.append(i+",");
}
}
return sb.substring(0, sb.length()-1);
}
可以容易的发现其中包含许多重复计算的数据,考虑到这种情况可以使用筛选法,具体步骤如下:
public String findAllPrimer(int num){
boolean[] intArr = new boolean[num];
StringBuffer sb = new StringBuffer();
for(int i=0;i < intArr.length;i++){
intArr[i] = true;
}
for(int i =2 , tmp=(int)Math.sqrt(num); i<tmp;i++){
for(int j = i+i;j < num;j += i){
intArr[j] = false;
}
}
for(int i=2;i < intArr.length;i++){
if(intArr[i] == true){
sb.append(i+",");
}
}
return sb.substring(0, sb.length()-1);
}
冲以上两种方法可以,比较筛选法的优势(其它可以计算出素数的方式,这里不在说明),通过时间的比较,筛选法的效率是一般方法的几倍