leetcode-204. 计数质数


给定整数 n ,返回 所有小于非负整数 n 的质数的数量 。

示例 1:

输入:n = 10
输出:4
解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。

示例 2:

输入:n = 0
输出:0

示例 3:

输入:n = 1
输出:0

提示:

0 <= n <= 5 * 106

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/count-primes/

  • 方法1: 暴力查找,时间超时
class Solution:
    def countPrimes(self, n: int) -> int:
        def isPrime(x):
            for i in range(2, int(x**0.5)+1):
                if x%i==0:
                    return False
            return True
        cnt = 0
        for i in range(2, n):
            if isPrime(i):
                cnt = cnt+1
        return cnt
  • 方法二:埃氏筛
class Solution:
    def countPrimes(self, n: int) -> int:
        is_prime = [1 for i in range(0,n)]
        for i in range(2, n):
            if is_prime[i]:
                for j in range(i*i, n, i):
                    is_prime[j] = 0
        count = sum(is_prime[2:])
        return count
  • 方法三: 线性筛
class Solution:
    def countPrimes(self, n: int) -> int:
        prime = []
        is_prime = [1 for i in range(0, n)]
        for i in range(2, n):
            if is_prime[i]:
                prime.append(i)
            for j in prime:
                if i*j>=n: break
                is_prime[i*j] = 0
                if i%j==0: break
        return len(prime)