原理

这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理。

公式

简单来说 就是  奇数就加上 偶数就减去   比如   要求   集合   

就=   A + B + C + D - AB - AC - AD - BC - BD - CD + ABC + ABD + ACD + BCD - ABCD(集合之间都是交集符号 省略没写)

应用

我们看两个题目

链接 51nod1284

给出一个数N,求1至N中,有多少个数不是2 3 5 7的倍数。 例如N = 10,只有1不是2 3 5 7的倍数。

让求不是2 3 5 7 的倍数的个数  那我们求出是2 3 5 7 的倍数的个数  总数一减就好了

下面问题就是求 2 3 5 7的倍数的个数

有两个性质:

性质1:如果数a、b都能被c整除,那么它们的和(a+b)或差(a-b)也能被c整除。

性质2:几个数相乘,如果其中有一个因数能被某一个数整除,那么它们的积也能被这个数整除。

根据性质二  求2 3 5 7的倍数  不止要找 2 的倍数 3 的倍数 5 的 7的  还要找 2x3  2x5 2x7 2x3x5  2x5x7等等等等

(一共有几个请看代码。。)

每个数和他的倍数  可以看作一个集合   就相当于求这四个集合的并集就是答案

2的倍数     n 中 x 的倍数有多少个    可以用   n / x  得到

2 和3 的倍数个数  那么就是     n / (2*3)  注意这里的2和3是互质的 如果不互质 那么应该是   n*gcd(a,b) / (a*b)

通过这个公式我们就求出了容斥原理公式中的每一项了  总数一减就是答案了

AC代码

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
using namespace std;
typedef long long ll;
ll n;
int main(){scanf("%lld",&n);ll sum=n/2+n/3+n/5+n/7-n/(2*3)-n/(2*5)-n/(2*7)-n/(3*5)-n/(3*7)-n/(5*7)+n/(2*3*5)+n/(2*3*7)+n/(2*5*7)+n/(3*5*7)-n/(2*3*5*7);printf("%I64d",n-sum);
}

题目二

链接 西北大学第四届程序设计竞赛A题

FF成天到晚咕了NE的训练。这可把NE急坏了。为了拯救ff的知识勺,拥有知识海的NE决定去现实gank一波FF,逼他训练。

可去gank了几波发现ff居然有着成千上万的小伙伴在帮助FF阻拦NE,这几次gank,NE都失败了。无奈之下痛定思痛,NE决定也带上自己的109个小伙伴去gankFF。

FF提前得知了这个消息,这可把FF急坏了.那可是109个人啊!

这时FF的小伙伴EN说:“FF莫慌,我这里有3盏BD哥的神灯,上面分别有一个素数,可以让编号被上面的数字整除的人昏睡过去,这样就可以大大削减NE的人数!”(FF所带的109个人分别被编号为1~109)

FF:“好!”。FF如同找到了救命稻草。但是由于只能削减一部分人数,FF需要召集的人数应该大于等于NE剩下的人数,但是时间紧急,FF算不出来了,你能告诉FF至少要准备多少人吗?

输入描述:

第一行包含一个正整数T(T<200)

之后的T行每行包含3个正整数,a,b,c(2<=a,b,c<106;a!=b,b!=c,c!=a;保证a,b,c为素数)

分别代表3盏神灯上的数字。

输出描述:

输出T行
每行一个整数,表示FF至少要准备的人数。

输入

3
2 3 5
5 7 11
13 2 3

输出

266666666
623376624
307692308

其实就是统计   a + b + c - ab - ac - bc + abc

code

#include<iostream>
#include<algorithm>
#include<string.h>
#include<stdio.h>
using namespace std;
typedef long long ll;
const int maxn=1e9;
ll T,a,b,c;
int main(){scanf("%lld",&T);while(T--){scanf("%lld%lld%lld",&a,&b,&c);ll ans=maxn/a+maxn/b+maxn/c-maxn/(a*b)-maxn/(a*c)-maxn/(b*c)+maxn/(a*b*c);printf("%lld\n",maxn-ans);}
}

容斥原理-51nod1284相关推荐

  1. HDU 4135 Co-prime(容斥原理)

    Co-prime 第一发容斥,感觉挺有意思的 →_→ [题目链接]Co-prime [题目类型]容斥 &题意: 求(a,b)区间内,与n互质的数的个数. \(a,b\leq 10^{15}\) ...

  2. BZOJ 2440: [中山市选2011]完全平方数 [容斥原理 莫比乌斯函数]

    2440: [中山市选2011]完全平方数 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 3028  Solved: 1460 [Submit][S ...

  3. bzoj 4710 [Jsoi2011]分特产 组合数学+容斥原理

    题面 题目传送门 解法 考虑容斥原理 显然,我们可以枚举有多少个人没有收到 然后就转化成一个组合问题了 假设现在有\(x\)个物品,\(n\)个人,可以有人没有被分到,那么分给这\(n\)个人的方案数 ...

  4. 【bzoj1853】[Scoi2010]幸运数字 容斥原理+搜索

    题目描述 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的"幸运号码"是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是&quo ...

  5. hdu 4366 Card Collector (容斥原理)

    http://acm.hdu.edu.cn/showproblem.php?pid=4336 题意:有 n 张卡片 ,每张卡片出现的 概率 是 pi 每包至多有 一张卡片 ,也有可能没有 卡片 . 求 ...

  6. LightOJ 1095 Arrange the Numbers(容斥原理)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1095 题意:给出数字n,m,K(0<K<=m<=n).在n个 ...

  7. (每日一题)P1447 [NOI2010] 能量采集(莫反套路 + 欧拉反演 / 容斥原理)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 每日一题(莫反 / 多项式 / 母函数 / 群论) 2021.4.19 莫反 Problem Solu ...

  8. 解题报告(二)C、(darkBZOJ 3771)Triple(生成函数 + FFT + 容斥原理)(3)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  9. BZOJ 4517: [Sdoi2016]排列计数 [容斥原理]

    4517: [Sdoi2016]排列计数 题意:多组询问,n的全排列中恰好m个不是错排的有多少个 容斥原理强行推♂倒她 $恰好m个不是错排 $ \[ =\ \ge m个不是错排 - \ge m+1个不 ...

  10. 【bzoj3771】Triple FFT+容斥原理

    题目描述 樵夫的每一把斧头都有一个价值,不同斧头的价值不同.总损失就是丢掉的斧头价值和. 他想对于每个可能的总损失,计算有几种可能的方案. 注意:如果水神拿走了两把斧头a和b,(a,b)和(b,a)视 ...

最新文章

  1. 内存溢出分析之工具篇
  2. 黑马lavarel教程---9、缓存操作
  3. Ice笔记-利用Ice::Application类简化Ice应用
  4. c语言填空题删除字符串k右边,计算机二级C语言上机模拟试题及解题思路
  5. php 设置session目录,php设置session保存目录的方法
  6. Vue全家桶实战02_【从入门到放弃系列】
  7. leetcode 494. Target Sum | 494. 目标和(动态规划)
  8. 海纳百川、有容乃大:从4个角度解读京东3C新方向
  9. python爬虫从入门到精通
  10. Linux虚拟化:Virtio: 一个 I/O 虚拟化框架
  11. MyCat分布式数据库集群架构工作笔记0011---高可用_主从读写分离配置
  12. 8个日志级别(OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL)
  13. Oracle数据库性能优化基础
  14. 在QGIS中使用GEE插件
  15. c语言开发入门教程,C语言开发入门教程
  16. 微信开发者工具登录问题,网络连接失败
  17. linux飞行模式问题解决
  18. 5个免费、优质视频素材网站,可商用
  19. linux 多核 双系统,Linux GRUB实现双系统引导教程
  20. 保龄球计分c语言程序,保龄球的积分计分规则

热门文章

  1. 性能测试负载模型(十)
  2. 写了一个字符串的二维表: TSta
  3. PostgreSQL在何处处理 sql查询之六十三
  4. (转)关于oracle表空间的规划方法
  5. Java StringBuffer 用法
  6. 步步为营 .NET三层架构解析 三、SQLHelper设计
  7. Android ViewPropertyAnimator:让动画变得简单起来!
  8. Dyn披露DDoS攻击细节:幕后是10万台的物联网设备僵尸网络
  9. 《TCP/IP路由技术(第二卷)》一1.5 检测与排除EGP故障
  10. windows执行命令来运行loadrunner录制好的脚本(收藏)