本帖最后由 不抛弃不放弃 于 2013-11-27 22:52 编辑
/*列出素数
* 在所有整数中,除啦1之外的所有数中,只能整除1和他本身的数,这种数叫质数或素数
*
*/
public class ForCycle_06 {
public static void main(String[] args){
int num=100; //声明求质数的范围
System.out.println("范围在"+num+"内的质数有:");
showPrimeNumber(num); //调用方法显示质数
}
private static boolean[] primeNumber(int num){ //求质数
if(num<0){ //检查指定范围
System.out.println("范围必须大于0");
return null;
}
boolean[] primes= new boolean[num+1];//声明boolean类型数组 长度为范围+1
primes[1]=false; //将特殊数字1抛出,因为1不是质数
Arrays.fill(primes,2,num+1,true); //将布尔数组元素的值都赋为true
int n=(int)Math.sqrt(num); //求开方 不清楚这里开始 为什么开方啊
for(int i=1;i<n;i++){
if(primes){ //如果是质数,那么i的倍数不是质数
for(int j=2*i;j<=num;j+=i){
primes[j]=false;
}
}
}
return primes;//到这里结束 这个区间不太理解 求解释
}
public static void showPrimeNumber(int num){ //显示质数
boolean []primes=primeNumber(num);
int n=0;
if(primes!=null){
for(int i=1;i<primes.length;i++){ //循环数组操作数组的元素
if(primes){//如果数组元素为真 ,则下标值为质数
System.out.print(i+" "); //输出质数
if(++n%10==0) //以每行10个质数输出
System.out.println();
}
}
System.out.println();
}
System.out.println("一共有"+n+"个");
}
} |
|