使用包含排斥原理求 1~120 之间的素数个数。

今天写题目时遇到的一个小问题,开始没有头绪,在仔细阅读了离散数学中的相关概念后,决定写个博客纪念一下。
原理:所有的合数都可由若干个素数因子的积构成。
什么意思呢?举个栗子:21=3*7;
现在我们的目的是计算120以内的素数个数,就是计算120以内的合数个数,然后用120减去,就可以得到了。
现在我们来计算120以内的合数个数:因为11 * 11=121,故可以推测,120以内的合数的素数因子没必要放入11,如33=3 * 11.只需要知道33可以被3整除就可以了。
所以我们推论:120以内的合数的素数因子只有2,3,5,7,接下来只需用公式计算。
|A∪B∪C∪D| = (|A|+|B|+|C|+|D|)-(|AB|+|AC|+|AD|+|BC|+|BD|+|CD|)+
(|ABC|+|ABD|+|ACD|+|BCD|)-|ABCD|
最终个数为:120-|A∪B∪C∪D|-1+4
(这里面1不是素数,所以减去,2,3,5,7之前算在了合数里面,所以要加上)
这里给出计算公式,其中A是能被2整除的数的个数
B:能被3整除的数的个数
C:能被5整除的数的个数
D:能被7整除的数的个数
AB:能被2和3同时整除的数的个数
之后以此类推,代码实现很简单,这里不再举例

想写得详细一点,废话可能过多,
如果对你有帮助,点个赞再走呗

  • 28
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值