埃拉托色尼筛子

本文介绍了埃拉托色尼筛法,通过消除每个质数的倍数来找到所有小于特定数值的质数。算法首先初始化一个数列,然后从2开始,依次消除每个数的倍数,最后剩下的是质数。文章还提供了一个C++实现,用于求解两个数的最大公约数,并包含求解最大公约数的辅助函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

睡觉
 

 

埃拉托色尼筛子

在中学时代我们曾经使用著名的欧几里得算法来求两个整数的最大公约数。用现代数学的术语来表述,欧几里得算法基于的方法是重复应用下列等式,直到m  mod n等于0:

    gcd(m,n)=gcd(n,m mod n)    (m mod n表尔m除以n之后的余数)

下面我们讨论一种更为普适性的算法来解决这一问题,它可以用来解决求任意一个整数的所有素约数序列,因此可以很好地利用相同的质数序列相乘的方法来实现求最大公约数。这种方法被称为“埃拉托色尼”筛”。该算法—开始初始化一个2一n连续整数序列.作为候选质数。然后,在算法的第—个循环中,它将类似4和6这样的2的倍数从序列中消去。然后,它指向列表中的下一个数字——3,又将其倍数消去(我们这里的做法过于直接,增加了个必要的开销。因为有一些数字,拿6来说吧,被消去了不止一次)。不必处理数字4,因为4本身和它的倍数都是2的倍数,它们已经在前面的步骤中被消去了(同样理由,任何被消去的数字的倍数都不必考虑)。第三步处理序列中剩下一个元素——5。该算法以这个方式不断做下去,直到序列“户已经没有可消的元素为止。序列中剩下的整数就是我们要求的质数。

  作为一个例子,我们尝试用这个算法伐出不大于n=20的质数序列:

2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20

2  3      5      7       9        11         13         15         17        19   

2  3      5      7                 11         13                       17        19  &nb

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值