51nod 1284 2 3 5 7的倍数 | 容斥原理

用容斥原理求出不满足条件的个数cnt,然后用n-cnt就得到答案了。

这里不满条件的数就是能整除2,3,5,7这些数的集合并集。要计算几个集合并集的大小,我们要先将所有单个集合的大小计算出来,然后减去所有两个集合相交的部分,再加回所有三个集合相交的部分,再减去所有四个集合相交的部分,依此类推,一直计算到所有集合相交的部分。

文章推荐:http://www.cppblog.com/vici/archive/2011/09/05/155103.html   

#include <iostream>
#include<bits/stdc++.h>

using namespace std;

int main()
{
    long long n,ans;
    scanf("%lld",&n);
    ans=n;
    ans-=(n/2+n/3+n/5+n/7);
    ans+=(n/6+n/10+n/14+n/15+n/21+n/35);
    ans-=(n/30+n/42+n/70+n/105);
    ans+=(n/210);
    cout<<ans<<endl;
}
原文地址:https://www.cnblogs.com/kimsimple/p/7462609.html