容斥原理-51nod1284
原理
这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理。
公式
简单来说 就是 奇数就加上 偶数就减去 比如 要求 集合
就= 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相关推荐
- HDU 4135 Co-prime(容斥原理)
Co-prime 第一发容斥,感觉挺有意思的 →_→ [题目链接]Co-prime [题目类型]容斥 &题意: 求(a,b)区间内,与n互质的数的个数. \(a,b\leq 10^{15}\) ...
- BZOJ 2440: [中山市选2011]完全平方数 [容斥原理 莫比乌斯函数]
2440: [中山市选2011]完全平方数 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 3028 Solved: 1460 [Submit][S ...
- bzoj 4710 [Jsoi2011]分特产 组合数学+容斥原理
题面 题目传送门 解法 考虑容斥原理 显然,我们可以枚举有多少个人没有收到 然后就转化成一个组合问题了 假设现在有\(x\)个物品,\(n\)个人,可以有人没有被分到,那么分给这\(n\)个人的方案数 ...
- 【bzoj1853】[Scoi2010]幸运数字 容斥原理+搜索
题目描述 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的"幸运号码"是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是&quo ...
- hdu 4366 Card Collector (容斥原理)
http://acm.hdu.edu.cn/showproblem.php?pid=4336 题意:有 n 张卡片 ,每张卡片出现的 概率 是 pi 每包至多有 一张卡片 ,也有可能没有 卡片 . 求 ...
- LightOJ 1095 Arrange the Numbers(容斥原理)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1095 题意:给出数字n,m,K(0<K<=m<=n).在n个 ...
- (每日一题)P1447 [NOI2010] 能量采集(莫反套路 + 欧拉反演 / 容斥原理)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 每日一题(莫反 / 多项式 / 母函数 / 群论) 2021.4.19 莫反 Problem Solu ...
- 解题报告(二)C、(darkBZOJ 3771)Triple(生成函数 + FFT + 容斥原理)(3)
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- BZOJ 4517: [Sdoi2016]排列计数 [容斥原理]
4517: [Sdoi2016]排列计数 题意:多组询问,n的全排列中恰好m个不是错排的有多少个 容斥原理强行推♂倒她 $恰好m个不是错排 $ \[ =\ \ge m个不是错排 - \ge m+1个不 ...
- 【bzoj3771】Triple FFT+容斥原理
题目描述 樵夫的每一把斧头都有一个价值,不同斧头的价值不同.总损失就是丢掉的斧头价值和. 他想对于每个可能的总损失,计算有几种可能的方案. 注意:如果水神拿走了两把斧头a和b,(a,b)和(b,a)视 ...
最新文章
- 内存溢出分析之工具篇
- 黑马lavarel教程---9、缓存操作
- Ice笔记-利用Ice::Application类简化Ice应用
- c语言填空题删除字符串k右边,计算机二级C语言上机模拟试题及解题思路
- php 设置session目录,php设置session保存目录的方法
- Vue全家桶实战02_【从入门到放弃系列】
- leetcode 494. Target Sum | 494. 目标和(动态规划)
- 海纳百川、有容乃大:从4个角度解读京东3C新方向
- python爬虫从入门到精通
- Linux虚拟化:Virtio: 一个 I/O 虚拟化框架
- MyCat分布式数据库集群架构工作笔记0011---高可用_主从读写分离配置
- 8个日志级别(OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL)
- Oracle数据库性能优化基础
- 在QGIS中使用GEE插件
- c语言开发入门教程,C语言开发入门教程
- 微信开发者工具登录问题,网络连接失败
- linux飞行模式问题解决
- 5个免费、优质视频素材网站,可商用
- linux 多核 双系统,Linux GRUB实现双系统引导教程
- 保龄球计分c语言程序,保龄球的积分计分规则
热门文章
- 性能测试负载模型(十)
- 写了一个字符串的二维表: TSta
- PostgreSQL在何处处理 sql查询之六十三
- (转)关于oracle表空间的规划方法
- Java StringBuffer 用法
- 步步为营 .NET三层架构解析 三、SQLHelper设计
- Android ViewPropertyAnimator:让动画变得简单起来!
- Dyn披露DDoS攻击细节:幕后是10万台的物联网设备僵尸网络
- 《TCP/IP路由技术(第二卷)》一1.5 检测与排除EGP故障
- windows执行命令来运行loadrunner录制好的脚本(收藏)