NC15079容斥原理
阿新 • • 發佈:2020-07-18
容斥原理
\[|A_1\cup A_2\cup A_3 \cup \cup \cup A_n|=\sum_{i=1}^n{|A_i|}-\sum_{1\leq i\leq j\leq n}{|A_i\cap A_j|}+\quad+(-1)^r|A_1\cap A_2\cap A_3\cap\quad\cap 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 '\n' #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; } }