leetcode 204. Count Primes

题目描述

leetcode 204. Count Primes_第1张图片

这是道纯数学类问题。

先回忆一下,素数的定义。

质数(英文名:Prime number)又称素数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。

可以用简单好理解的Eratosthenes筛法,时间复杂度是O(nloglogn)。

算法从小到大枚举所有数,对每一个素数(从2开始,已知2是素数),筛去它的所有倍数,剩下的就都是素数了。当从小到大到达某数a时,如果a没有被前面步骤的数筛去,那么a一定是素数。这是因为,如果a不是素数,那么a一定有小于a的素因子,这样在之前的步骤中a一定会被筛掉,所以当枚举到a时还没有被筛掉,那么a一定是素数。

class Solution {
public:
    int countPrimes(int n) {
        //由素数的定义,1既不是素数也不是合数
        if(n < 2) return 0;
        int prime_count = 0;
        //isPrime[i]表示,正整数i是否是素数,i>=2
        vector isPrime(n,true);
        for(int i = 2;i

你可能感兴趣的:(leetcode,leetcode,算法,素数)