埃拉托色尼筛法:求质数的方法

埃拉托色尼筛法:求质数的方法

其本质是排除法,把某一范围内的合数全去掉,剩下的就是质数.

既然采取排除法,那么就得保证所有的合数都被除去,那怎么保证把所有合数都除去?

以下就是典型的例子:找出1000以内的所有质数.

首先,把2的倍数全部划去,也就是说把2 * ( 2 到 500 )全部去掉,然后把3的倍数全部划去,也就是说把3 * ( 2 到 333 )全部去掉,接下去就是5,7……

此算法的根据是:

整数唯一分解定理 :每个大于1的整数均可以表示为素数之积,而且这些素因子按大小排列之后,写法仅有一种形式.(这里的素数应该要包括1,特殊处理)

但是,如果采用上面的算法,明显会极大浪费时间和精力,因为有很多重复被划去的数.比如说6 = 2 * 3 = 3 * 2, 在划去2的倍数时,已经被划去了,在划去3的倍数时,又被划了一次,像这样被重复划去的数有很多.

为了解决这一问题,我们可以采用下面的方法:

比如说在划去n的倍数的时候,只需要从n的平方开始划去合数,因为n是从小到大递增的,所以当我们划去n的倍数时,( 2 到 n-1 ) * n都已经在前面被划去了.

根据这一结论,我们可以发现找出1000以内的质数只需要,划到31的倍数,因为31的平方是961,32的平方式1024。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值