#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
typedef __int64 ll;
const int maxn = 15;
int fac[maxn];
int n,tt;
int gcd(int a,int b)
{
if(b==0) return a;
return gcd(b,a%b);
}
int lcm(int a,int b)
{
int d=gcd(a,b);
return a/d*b;
}
void dfs(int f,int t,int sf,ll &ans)
{
if(sf>n) return ;
if(t&1)
ans+=(n/sf);
else
ans-=(n/sf);
for(int i=f+1;i<=tt;i++)
{
dfs(i,t+1,lcm(sf,fac[i]),ans);
}
}
int main()
{
//freopen("in.txt","r",stdin);
int m;
ll ans;
while(~scanf("%d%d",&n,&m))
{
tt=0;
n--;
bool sign=0;
for(int i=1;i<=m;i++)
{
int x;
scanf("%d",&x);
if(x==0) continue;
else if(x==1) {sign=1;continue;}
fac[++tt]=x;
}
if(sign) {cout<<n<<endl;continue;}
ans=0;
for(int i=1;i<=tt;i++)
{
dfs(i,1,fac[i],ans);
}
printf("%I64d\n",ans);
}
return 0;
}
hdu1796(容斥原理)
最新推荐文章于 2019-08-03 18:48:00 发布