10
1
分析:
容斥原理:如果被计数的事物有A、B两类,那么,A类B类元素个数总和= 属于A类元素个数+ 属于B类元素个数—既是A类又是B类的元素个数。(A∪B = A+B - A∩B)
要计算几个集合并集的大小,
我们要先将单个集合的大小计算出来,
然后减去两个集合相交的部分,
再加回三个集合相交的部分,
再减去四个集合相交的部分,
以此类推,一直计算到所有集合相交的部分。
所以这个题目要求的是不是2 3 5 7的倍数,
可以求是2 3 5 7的倍数之后,再减去即可。
这样就会用到容斥原理,先求仅仅只是整除2 3 5 7的数量,
再减去整除了它们之间两两的乘积的数量,
再加上整除它们三个之间的乘积的数量,
再加上整除四个的数量。
#include<stdio.h>
int main()
{
long long n;
long long s=0,a,b,c,d,ab,ac,ad,bc,bd,cd,abc,acd,bcd,abd,abcd;
scanf("%lld",&n);
//2,3,5,7的倍数
a=n/2;
b=n/3;
c=n/5;
d=n/7;
//两数的倍数
ab=n/6;
ac=n/10;
ad=n/14;
bc=n/15;
bd=n/21;
cd=n/35;
//三数的倍数
abc=n/30;
abd=n/42;
acd=n/70;
bcd=n/105;
//四数的倍数
abcd=n/210;
s=a+b+c+d-ab-ac-ad-bc-bd-cd+abc+abd+acd+bcd-abcd;
printf("%lld\n",n-s);
return 0;
}