简单思路
循环内部,从0到根号n,如果遇到能整除的数,就不是质数
最优解法
public int countPrimes(int n) {
//初始化创建大小为n的数组,
boolean[] isPrim = new boolean[n];
//初始化为true
Arrays.fill(isPrim, true);
//逆向思维:从小数开始,例如:2--》2*2=4,则4不是质数;2*3=6,则6不是质数······
//到Math.sqrt(n)为止
for (int i = 2; i * i < n; i++)
if (isPrim[i])
for (int j = i * i; j < n; j += i)
isPrim[j] = false;
int count = 0;
for (int i = 2; i < n; i++)
if (isPrim[i]) count++;
return count;
}
逆向思维:从小数开始,例如:2–》22=4,则4不是质数;23=6,则6不是质数······到Math.sqrt(n)为止。