将几个集合合并,求合并后的集合数的个数。
首先先求出各个集合的数的个数相加,减2个集合的相交的个数,加三个集合相交的个数,减四个集合相交的个数。。。。。
http://www.51nod.com/onlineJudge/problemList.html 容斥原理的简单应用。
#include<cstdio> #include<cstring> #include<iostream> #define INF 99999999 #define ll __int64 using namespace std; ll slove(ll n) { ll osum1,osum2,osum3,osum4; osum1 = n/2; osum2 = n/3; osum3 = n/5; osum4 = n/7; ll ans = osum1+osum2+osum3+osum4; ans = ans - n/(2*3) - n/(2*7) - n/(2*5) - n/(3*5) - n/(3*7) - n/(5*7); ans = ans + n/(2*3*5) + n/(2*3*7) + n/(3*5*7) + n/(2*5*7); ans = ans - n/(2*3*5*7); return ans; } int main() { ll n; while(~scanf("%I64d",&n)){ cout<<n - slove(n)<<endl; } }