Leetcode 204. 计数质数
1.题目基本信息
1.1.题目描述
给定整数 n ,返回 所有小于非负整数 n 的质数的数量 。
1.2.题目地址
https://leetcode.cn/problems/count-primes/description/
2.解题方法
2.1.解题思路
线性筛 / 埃氏筛
3.解题代码
线性筛方法代码
class Solution:
# 线性筛。关键点:每个合数通过它的最小质因数进行筛去
def countPrimes(self, n: int) -> int:
# 第一步,构建维护变量。isPrime[i]表示数字i是否是数字;primes数组维护找到的质数数组
isPrime = [1] * n
primes = []
# 第二步,枚举数字
for i in range(2, n):
# 2.1.如果是素数,添加到primes有序列表中
if isPrime[i]:
primes.append(i)
# 2.2.遍历当前所有的素数
for prime in primes:
if prime * i < n:
# 这里的prime一定是prime*i的最小质因数
isPrime[prime * i] = 0
else:
break
if i % prime == 0:
break
# print(primes)
return len(primes)
埃氏筛方法代码
class Solution:
# 埃式筛
def countPrimes(self, n: int) -> int:
result = 0
isPrime = [1] * n
for i in range(2, n):
if isPrime[i]:
result += 1
j = i
while j * i < n:
isPrime[j * i] = 0
j += 1
# print(result)
return result
4.执行结果


浙公网安备 33010602011771号