public class Solution {

    public int countPrimes(int n) {

        int c=0;

        if(n<=1)

            return c;

        else{

            for(int j=2;j<=n;j++)

            {

                int v=0;

                for(int i=2;i<=Math.sqrt(n);i++)

                {

                    if(j%i==0)

                    {

                        v=1;

                        break;

                    }

                }

                if(v==0)

                    c++;

            }

            return c;

        }

    }

}

提交算法后显示

Status: 
Time Limit Exceeded


Submitted: 0 minutes ago

Last executed input:1500000

修改

1. 计算小于n的质数个数,除了2之外,所有的偶数都不是质数,因此只判断所有的奇数

2. 对于某个奇数k,判断其是否为质数,只考虑k是否被2~sqrt(k)中的值整除 

3. 因为本身是奇数,因此只判断是否被2~sqrt(k)中的奇数整除


public class Solution {

    public int countPrimes(int n) {

        int c=0;

        if(n<=2)

            return c;

        if(n==3)

            return ++c;

        else{

            c++;

            for(int j=3;j<n;j=j+2)

            {

                int v=0;

                for(int i=3;i<=Math.sqrt(j);i=i+2)

                {

                    if(j%i==0)

                    {

                        v=1;

                        break;

                    }

                }

                if(v==0)

                    c++;

            }

            return c;

        }

    }

}