欧拉筛(线性筛)12345678910111213def euler_sieve(n): pri = [] not_prime = [False] * (n + 1) for i in range(2, n + 1): if not not_prime[i]: pri.append(i) for pri_j in pri: if i * pri_j > n: break not_prime[i * pri_j] = True if i % pri_j == 0: break return pri