http://bak.vjudge.net/problem/13388/origin
题意:经典容斥。。。不过给出的数不是互质的,容斥的时候不是用乘积,是用lcm
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
const ll p =1000000007;
const int N=100000;
ll lcm(ll a,ll b)
{
return a*b/__gcd(a,b);
}
int aa[11];
int main()
{
ll n;
int m;
while(scanf("%lld%d",&n,&m)!=EOF)
{
n--;
int id=0;
for (int i=0; i<m; i++)
{
scanf("%d",&aa[id++]);
if (aa[id-1]==0)id--;
}
m=id;
int all=1<<m;
ll ans=0;
for (int i=1; i<all; i++)
{
ll tmp=1;
int cun=0;
for (int j=0; j<m; j++)
{
if ((1<<j)&i) tmp=lcm(tmp,aa[j]),cun++;
}
if (cun%2)
ans+=n/tmp;
else ans-=n/tmp;
}
printf("%lld\n",ans);
}
return 0;
}