AcWing 868. 筛质数
原题链接
简单
作者:
皓首不倦
,
2020-09-03 00:19:20
,
所有人可见
,
阅读 527
# 筛选出1-N中的质数
def get_prime(N):
prime_vals = []
flag = [True] * (N+1)
for val in range(2, N+1):
if flag[val]:
prime_vals.append(val)
# 从小到大枚举已经找出来的质数,直到找到val的最小质因子为止
# 对于枚举到的每一个质数P,如果这个质数不是val的最小质因子
# 那必然是val * P 这个数值的最小质因子,因为P比val的最小
# 质因子小,同时P肯定是自己的最小质因子,所以P必然是val*P的
# 最小质因子,同理,当P是val最小质因子时候,P同时是P和val
# 的最小质因子,肯定也是P*val的最小质因子,就可以把P*val从
# 质数里面筛掉,此算法可以保证每一个合数都是被其最小质因数
# 筛掉的
for p_val in prime_vals:
if val * p_val > N:
break
flag[val * p_val] = False
if val % p_val == 0:
break
return prime_vals
print(len(get_prime(int(input()))))