0
点赞
收藏
分享

微信扫一扫

LeetCode 204.计数质数

小猪肥 2022-02-12 阅读 33
//暴力破解
class Solution
{
public: 
    //判断一个数字是否是质数
    bool whether_prime(int n)
    {
        for (int i = 2; i * i <= n; i++)
        {
            if (n % i == 0)
            {
                return false;
                break;
            }
        }
        return true;
    }
	//计算小于n的质数个数
    int countPrimes(int n)
    {
        int num = 0;
        for (int i = 2; i < n; i++)
        {
            if (whether_prime(i))
            {
                num++;
            }
        }
        return num;
    }
};
//埃氏筛:如果x是质数,那么大于x的x的倍数2x,3x,… 一定不是质数
class Solution
{
public:
    int countPrimes(int n)
    {
        // whether_prime表示i是否为质数
        vector<int> whether_prime(n, 1);
        int result = 0;
        for (int i = 2; i < n; i++)
        {
            //统计质数个数
            if (whether_prime[i])
            {
                result++;
            }
            if ((long long)i * i < n)
            {
                //把是质数的i的k(k>=2)倍数标记为合数
                for (int j = i * i; j < n; j += i)
                {
                    whether_prime[j] = 0;
                }
            }
        }
        return result;
    }
};
举报

相关推荐

0 条评论