#include<bits/stdc++.h>
using namespace std;
int gcd(long long a,long long b)
{
return b==0?a:gcd(b,a%b);
}
int main()
{
long long n,p,a,b,pp;
while(cin>>n)
{
while(n--)
{
cin>>p;
cin>>a>>b;
if(a<b)
{
swap(a,b);
}
pp=a*b/gcd(a,b);
a=p/a;
b=p/b;
pp=p/pp;
cout<<a+b-2*pp<<endl;
}
}
return 0;
}
我这里写的是两个的并集,想看更详细的请移步这位小姐姐的博客https://blog.csdn.net/qq_41117236/article/details/81099016
容斥定理
计数方法的思想是先不考虑重叠的部分,先把一个部分中的所有内容数计算出来,再将互斥的部分减去,这就称为容斥原理。
如果计算几个集合的并集大小,要先将所有单个集合的和计算出来,然后减去两个集合的相交部分,再加上三个集合相交的部分,再减去四个集合相交的部分,依次类推直到加完所有的集合。
这个是从小姐姐那里偷来的图:
抽屉原理
第一抽屉原理:
原理1: 把多于n+1个的物体放到n个抽屉里,则至少有一个抽屉里的东西不少于两件。
原理2 :把多于mn(m乘n)+1(n不为0)个的物体放到n个抽屉里,则至少有一个抽屉里有不少于(m+1)的物体。
原理3 :把无穷多件物体放入n个抽屉,则至少有一个抽屉里 有无穷个物体。
第二抽屉原理:
把(mn-1)个物体放入n个抽屉中,其中必有一个抽屉中至多有(m—1)个物体。
死神来了
时间限制:1000 ms | 内存限制:65535 KB
难度:3
输入
有多组测试数据,不多于10000;
每组有两个数n,m;
以文件结束符EOF为结束标志。
输出
输出"YES"或"NO"。
样例输入
100 80
100 20
样例输出
YES
NO
描述
有一天,小王子在遨游世界时,遇到了一场自然灾害。一个人孤独的在一个岛上,没有吃的没有喝的。在他饥寒交迫将要死亡时,死神来了。由于这个死神在成神之前是一个数学家,所以他有一个习惯,会和即死之人玩一个数学游戏,来决定是否将其灵魂带走。游戏规则是死神给小王子两个整数n(100<=n<=1000000),m(2<=m<=n),在1~n个数中,随机取m个数,问在这m个数中是否一定存在一个数是另一个数的倍数,是则回答“YES",否则”NO"。如果小王子回答正确,将有再活下去的机会。但是他很后悔以前没有好好学习数学,小王子知道你数学学得不错,请你救他一命。
【代码】
#include<bits/stdc++.h>
main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
if(m>n/2+(n&1))
printf("YES\n");
else
printf("NO\n");
}
}
小姐姐的原文
https://blog.csdn.net/qq_41117236/article/details/81099016