因为0和1不是质数和合数。所以i从2开始进行循环,到100结束循环,也就是计算100以内的质数和合数,a是用来记录他有几个因数,质数只有1和自身的因数,所以a<=2和i==j的时候为质数,因为合数有非1和自身的因数所以是>2的所以,当a>2的时候为合数。
题目意思:求100以下(不包含100的所有合数)。有兴趣的话看一下埃氏筛、线性筛,同样可以求质数合数,速度上比这个方法快很多:
private void test(){
boolean[] isCompositeNumber = new boolean[100];
for(int i = 2; i < 100; i++){
if(!isCompositeNumber[i]){
//从2倍开始筛选,利用性质,所有合数都是质数的倍数,质数的2倍+的都是合数
//这个叫埃氏筛
// for(int j = 2; j * i < 100; j++){
// isCompositeNumber[j*i] = true;
// }
//从i倍开始筛选,比如2*3=6,如果6是2的倍数,那在质因子2的倍数的时候会被筛选,所以质因子3不用重复筛选了
//这个叫线性筛,速度比埃氏筛要快
for(int j = i; j * i < 100; j++){
isCompositeNumber[j*i] = true;
}
}
}
for(int i = 1; i < 100; i++){
if(isCompositeNumber[i])
System.out.println(i);
}
}