思路:
首先,判断n是不是质数,只需要判断到n的平方根为止。
(2)质数的倍数一定不是质数。
class Solution {//求的是小于n的所有质数个数!!!! public int countPrimes(int n) {//如果到n的平方根为止n都找不到能整除自己的数,那么n一定是质数 boolean[] isPrime=new boolean[n]; Arrays.fill(isPrime,true);//填充为true for(int i=2;i*i<n;i++)//判断一个数是不是质数只要判断到平方根,这个循环是标出所有非质数 {//2一定是质数, if(isPrime[i])//是质数 { for(int j=2*i;j<n;j+=i)//质数的倍数一定不是质数,j=2*i易写错 { isPrime[j]=false; } } } int count = 0; for (int i = 2; i < n; i++)//2一定是质数,isPrime[i]代表i这个数是不是质数1 if (isPrime[i]) count++; return count; } }