容斥原理
阿新 • • 發佈:2021-01-08
容斥原理
能被整除的數
這道題是典型的利用容斥原理的題目
由於題目中所給的都是質數,因此在求交集的時候可以直接相乘求交集
這裡判斷哪個數選到哪個數沒有選到可以DFS也可以二進位制列舉
這裡給出二進位制列舉的做法
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=20;
int n,m;
int p[N];
int main()
{
cin>>n>>m;
for(int i=0;i< m;i++) cin>>p[i];
int res=0;
for(int i=1;i<(1<<m);i++)
{
int t=1,cnt=0;
for(int j=0;j<m;j++)
{
if(i>>j&1)
{
cnt++;
if((ll)t*p[j]>n)
{
t=-1;
break ;
}
t*=p[j];
}
}
if(t!=-1)
{
if(cnt%2) res+=n/t;
else res-=n/t;
}
}
cout<<res<<endl;
return 0;
}