codeforces 630 K. Indivisibility

问1~n内有多少数能被2~4中任意一个数整除。

容斥原理。那么问题可以简化成四个数的容斥,即2 3 5 7,(忽略倍数的情况)。那么有公式a+b+c+d-ab-ac-ad-bc-bd-cd+abc+abd+acd+bcd-abcd

#include<map>
#include<queue>
#include<cmath>
#include<iostream>
#include<cstdio>
#include<stack>
#include<cstring>
#include<algorithm>
#include<string>
#define inf 0x3f3f3f3f
#define eps 1e-5
#define LL long long
using namespace std;
const double PI=acos(-1.0);
int main(){
    LL n,m,i,j,k;
    while(~scanf("%lld",&n)){
        k=n/2+n/3+n/5+n/7-n/6-n/10-n/14-n/15-n/21-n/35+n/30+n/42+n/105+n/70-n/210;
        printf("%lld\n",n-k);
    }
    return 0;
}

你可能感兴趣的:(数论,codeforces,容斥)