NC15079容斥原理
Posted waryan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NC15079容斥原理相关的知识,希望对你有一定的参考价值。
容斥原理
[|A_1cup A_2cup A_3 cup cup cup A_n|=sum_{i=1}^n{|A_i|}-sum_{1leq ileq jleq n}{|A_icap A_j|}+quad+(-1)^r|A_1cap A_2cap A_3capquadcap A_n|
]
链接:https://ac.nowcoder.com/acm/problem/15079
来源:牛客网
题目描述
给出一个数n,求1到n中,有多少个数不是2 5 11 13的倍数。
输入描述:
本题有多组输入
每行一个数n,1<=n<=10^18.
输出描述:
每行输出输出不是2 5 11 13的倍数的数共有多少。
思路
容易短缺的东西,注意在求解的时候把每个都用组合数算一下,看一下有没有短缺。
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define DOF 0x7f7f7f7f
#define endl ‘
‘
#define mem(a,b) memset(a,b,sizeof(a))
#define debug(case,x); cout<<case<<" : "<<x<<endl;
#define open freopen("ii.txt","r",stdin)
#define close freopen("oo.txt","w",stdout)
#define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define pb push_back
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<long long, long long> PII;
const int maxn = 1e6 + 10;
const ll mod=1e9+7;
int main(){
ll n;
while(cin>>n){
ll ans=0;
ans=n/2+n/5+n/11+n/13;
ans=ans-(n/(2*5)+n/(2*11)+n/(2*13)+n/(5*11)+n/(5*13)+n/(11*13));
ans=ans+(n/(2*5*11)+n/(2*5*13)+n/(5*11*13)+n/(2*11*13));
ans-=n/(2*5*11*13);
cout<<n-ans<<endl;
}
}
以上是关于NC15079容斥原理的主要内容,如果未能解决你的问题,请参考以下文章