寻找素数:欧拉筛法(Sieve of Euler)
寻找素数:欧拉筛法(Sieve of Euler)缘起
欧拉筛法(Sieve of Euler)是一种计算一定范围内所有素数的算法。
它是基于埃拉托斯特尼筛法的一个改进(没听过的鱼油,请先学习 -> 寻找素数:埃拉托斯特尼筛法(Sieve of Eratosthenes))。
两者的主要区别在于它保证了每个合数只被它的最小质因数筛去,从而减少了重复操作,提高了筛选效率。
这个筛法的名字来源于著名的数学家欧拉,但并不是由欧拉本人提出的。
它是近年来计算机时代的产物,是一种更适合于计算机运算的筛法。
步骤
下面,小甲鱼给大家阐述欧拉筛法的步骤:
1. 创建一个列表,表示每个数字是否是素数。初始化时,我们先假设所有的数都是素数(除了 0 和 1,地球人都知道它们不是素数)。
2. 从最小的素数 2 开始,如果一个数是素数,就把它的所有倍数标记为非素数。这一步被称为 “筛选”,因为我们在筛选出所有由当前素数产生的合数。
3. 不同于埃拉托斯特尼筛法,欧拉筛法在筛选合数时,每个合数只会被它的最小质因数筛去。这是通过在内部循环中增加一个判断实现的:如果当前数 i 能被素数整除,就跳出循环。
4. 找到下一个仍被标记为素数的数字,然后把它的所有倍数标记为非素数。
5. 重复第 4 个步骤,直到所有的数都被处理过。
6. 最后,仍被标记为素数的数字就是所有的素数。
这种方法的主要优点是效率高,因为每个合数只被筛去一次,而述埃拉托斯特尼筛法每个合数将被筛选若干次。
演示
https://fishc.oss-cn-hangzhou.aliyuncs.com/Videos/Algorithm/SieveOfEuler.mp4
实现
**** Hidden Message *****
6666 讲得不错{:10_254:} 赞👍 看看 欧拉筛法(Sieve of Euler) 看完看完看完了就知道差距了 真是太厉害了!还可以这么筛选,减少计算机运算量 本帖最后由 clollipops 于 2023-7-25 18:34 编辑
寻找素数:欧拉筛法(Sieve of Euler) 赞,欧拉筛法确实提升了效率 这样可简便多了 可以在 3.11 里运行正常吗? 太厉害了这玩意 太厉害了这玩意 厉害{:10_275:} 讲的不错,还是听不懂 线性筛(喜) {:10_254:} 看看 可否做一期:PageRank算法,这样的呢{:5_102:}
页:
[1]
2