筛法求素数(快速筛和普通筛)

先插一个链接,这是我觉着关于这一方面,写的比较好的博客https://blog.csdn.net/Dinosoft/article/details/5829550尤其是这个博主关于普通筛法的优化。

 

插一个知识点:任何合数,都能写成素数的积的形式。比如 6=2*3; 50=2*5*5。

 

根据上面那个博客,我写两点自己想出来的东西:

  1. 普通筛法:关于为什么:

当前剩下的最小的数就是质数(素数)

因为,假如a是合数,那么a肯定是可以由比a小的数相乘得到的。既然,比a小的数字的倍数都已经被筛掉了,且a是当前没被遍历(第一重for循环)的最小的数,那a就肯定不是合数了。因为,a没有比它更小的因子。

    2.快速筛法:关于第二重循环

原博客中说:只能筛出不大于p1的质数 * i。

那为什么,能保证筛出时不漏掉合数呢?

因为当 i 为合数时,i能拆成好多素数的积的形式。而我们的素数 prime[j] 又是从小开始遍历的,所以恰好可以不漏掉合数,将他们筛出来。

 

 

 

另外,附一点其他的收获:想要证明程序时,可以使用数学归纳法,尤其是循环。就像原博客那样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值