添加链接描述
容斥原理。奇数个为加,偶数个为减。
通过位运算来枚举。要从1开始,从0开始意味着什么都不选,是错误的。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=3e4+5,INF=0x3f,mod=1e9+7;
int p[20];
int main()
{
ll n,m;
cin>>n>>m;
for(int i=0;i<m;i++)
cin>>p[i];
ll res=0;
for(int i=1;i<1<<m;i++)
{
ll t=1,cnt=0;
for(int j=0;j<m;j++)
if(i>>j&1)
{
if(t*p[j]>n)
{
t=-1;
break;
}
cnt++;
t=t*p[j];
}
if(t!=-1)
{
if(cnt%2) res+=n/t;
else res-=n/t;
}
}
cout<<res<<endl;
return 0;
}