LeetCode探索之旅(58)-204质素统计

今天继续刷LeetCode,第204题,求给定的数以下,包含多少个素数。

分析:
素数的定义:一个大于1的自然数,除了1和它自身以外,不能被其他自然数整除的数就是质数,也叫作素数。所以1不是质数。
方法一:通过遍历给定数以下的每一个数,并同时判断该数是否为素数,是的话就累加1,否则继续判断,这个方法虽然可行,但是会出现时间超时的问题,于是采用筛选法。
方法二:通过筛选的方式,如果n是素数,那么该数的所有倍数都不是素数,全部删除,知道循环到n的开方。

问题:
1、超时出现时,如何解决;
2、素数的判断;
3、以空间换取时间;

附上超时代码1:

class Solution {
public:
    int countPrimes(int n) {
        int count=0;
        if(n==1)
            return 0;
        while(n--&&n>1)
        {
            if(isPrime(n))
                count++;
        }
        return count;
    }
    bool isPrime(int n)
    {
        for(int i=2;i<=n/2;i++)
        {
            if(n%i==0)
                return false;
        }
        return true;
    }
};

附上通过代码2:

class Solution {
public:
    int countPrimes(int n) {
        vector state(n,true);
        if(n==0)
            return 0;
        state[0]=false;
        state[1]=false;
        for(int i=2;i

python实现:
注意:
(1)设置n为数组的方式;
(2)乘方的使用;

附上python代码:

class Solution:
    def countPrimes(self, n: int) -> int:
        if n<3:
            return 0;
        state=[1]*n
        state[0]=state[1]=0
        for i in range(2,int(n**0.5)+1):
            if state[i]==1:
                for j in range(i*i,n,i):
                    state[j]=0
                    
        return sum(state)

你可能感兴趣的:(代码训练)