【leetcode】-204. Count Primes 计算素数
程序员文章站
2024-03-14 20:49:47
...
题目
Count the number of prime numbers less than a non-negative number, n.
Example:
Input: 10
Output: 4
Explanation: There are 4 prime numbers less than 10, they are 2, 3, 5, 7.
埃氏筛法
素数是只能被1和其本身整除的数,最小的素数就是2.
埃拉托色尼筛选法(the Sieve of Eratosthenes)简称埃氏筛法,是古希腊数学家埃拉托色尼(Eratosthenes 274B.C.~194B.C.)提出的一种筛选法。 是针对自然数列中的自然数而实施的,用于求一定范围内的质数。
(1)先把1删除(现今数学界1既不是质数也不是合数)
(2)读取队列中当前最小的数2,然后把2的倍数删去
(3)读取队列中当前最小的数3,然后把3的倍数删去
(4)读取队列中当前最小的数5,然后把5的倍数删去
(5)读取队列中当前最小的数7,然后把7的倍数删去
(6)如上所述直到需求的范围内所有的数均删除或读取
python代码
class Solution(object):
def countPrimes(self, n):
"""
:type n: int
:rtype: int
"""
if n<3:
return 0
isPrimes = [True] * n
isPrimes[0]= isPrimes[1]=False
for i in range(2,int(n**0.5)+1):
if isPrimes[i]:
for j in range(i*i,n,i):
isPrimes[j] = False
count = 0
for i in range(2,n):
if isPrimes[i]:
count += 1
return count
时间复杂度为O(nloglogn),空间复杂度为O(n)。
上一篇: 求小于N的素数个数(N>1e9)
推荐阅读
-
LeetCode 204. Count Primes--从一开始的质数个数--C++,Python解法
-
LeetCode 204. Count Primes
-
【leetcode】-204. Count Primes 计算素数
-
【Leetcode】204. Count Primes 204. 计数质数
-
LeetCode-204-Count Primes-E
-
Leetcode#204. Count Primes
-
LeetCode 204. Count Primes
-
LeetCode ---204. Count Primes
-
【leetcode】204. Count Primes
-
LeetCode:204. Count Primes