线性筛
# 求 1 ~ n 所有的质数【线性筛,也叫欧拉筛,时间复杂度为O(n),埃氏筛为O(nlogn)】
n = int(input())
prime = []
vis = [0] * (n + 1)
# 合数 = 最小质因子 × k (最大且不等于它自身的因数)
# 每个合数必有一个【最小素因子】或【最大因子】
for i in range(2,n + 1):
if not vis[i]:
prime.append(i)
for x in prime:
if x * i > n:
break
vis[x * i] = 1
# 这里的x必须是x * i 的最小质因子!
if i % x == 0:
break
print(len(prime))

浙公网安备 33010602011771号