建一个团购网站要多少钱,宁波外贸公司大全,开发公司移交柴油发动机需要具备哪些条件,google seo是什么意思欧拉筛#xff08;Eulers Sieve#xff09;#xff0c;又称线性筛法或欧拉线性筛#xff0c;是一种高效筛选素数的方法。它的核心思想是从小到大遍历每个数#xff0c;同时标记其倍数为合数#xff0c;但每个合数只被其最小的质因数标记一次#xff0c;从而避免了重复标…欧拉筛Eulers Sieve又称线性筛法或欧拉线性筛是一种高效筛选素数的方法。它的核心思想是从小到大遍历每个数同时标记其倍数为合数但每个合数只被其最小的质因数标记一次从而避免了重复标记实现了线性时间复杂度的素数筛选。
以下是一个使用 Python 实现的欧拉筛的例子
def euler_sieve(n): # 初始化标记数组默认所有数都是素数未标记 is_prime [True] * (n 1) is_prime[0] is_prime[1] False primes [] # 用于存储素数 for i in range(2, n 1): if is_prime[i]: # i 是素数将其加入素数列表 primes.append(i) # 标记 i 的倍数为合数 for j in range(i * i, n 1, i): is_prime[j] False return primes # 示例找出 100 以内的素数
primes_up_to_100 euler_sieve(100)
print(primes_up_to_100)
在这段代码中euler_sieve 函数接受一个整数 n 作为参数返回小于等于 n 的所有素数的列表。函数内部首先创建了一个布尔数组 is_prime用于标记每个数是否为素数。然后函数从 2 开始遍历到 n对于每个遍历到的数 i如果 is_prime[i] 为真则将 i 加入到素数列表中并标记 i 的所有倍数为合数从 i * i 开始因为比 i 小的数的倍数已经被之前的素数标记过了。
最终函数返回素数列表。在这个例子中我们调用 euler_sieve(100) 来找出 100 以内的所有素数并打印结果。