1160 不能被整除的数【容斥原理】

来源:互联网 发布:淘宝旺铺出售 编辑:程序博客网 时间:2024/05/19 13:55


不能被整除的数

时间限制:1000 ms  |  内存限制:65535 KB
难度:1
描述

给你一个数N  再给你3个数a,b,c求1到N内即不能被a,b整除,也不能被c整除的数

 

输入
有多组测试数据
每次输一个数N 接下来输入3个数a,b,c
输出1~N不能被a,b,c整除的数字的个数
0<=N<=2*10^9 a,b,c 都不大于N。N=0时不做处理并且结束
输出
输出1~N不能被a,b,c整除的数字的个数
每次输出占一行
样例输入
10005 6 8203 4 5
样例输出
6008


可以算一道水题吧,只要明白需要把所有的项加起来之后减去重复的部分和加上多减去的部分......

最后求得到的就是需要的多个集合的并集......


 #include<stdio.h>int gcd(int a,int b)//最大公约数{if(b==0){return a;}return gcd(b,a%b);}int gbd(int a,int b)//为了防止溢出,这里单独处理,求最小公倍数{int x=gcd(a,b);return a/x*b; }int main(){int n,a,b,c,sum;//freopen("shuju.txt","r",stdin);while(scanf("%d",&n),n){scanf("%d%d%d",&a,&b,&c);sum=n/a-n/gbd(a,b)+n/b-n/gbd(b,c)+n/c-n/gbd(a,c)+n/gbd(gbd(a,b),c);//容斥原理printf("%d\n",n-sum);}return 0;}         




0 0
原创粉丝点击