点击打开题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1796
#include<cstdio>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int arr[200];
//int select[200];
int n,m,cnt,ans;
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
void dfs(int cur,int lcm ,int num)
{
lcm=arr[cur]/gcd(arr[cur],lcm)*lcm;
if(num&1)
ans+=(n-1)/lcm;
else
ans-=(n-1)/lcm;
for(int i=cur+1;i<cnt;i++)
dfs(i,lcm,num+1);
}
int main()
{
ans=0;
while(~scanf("%d%d",&n,&m))
{
cnt=0;
for(int i=0;i<m;i++)
{
int x;
scanf("%d",&x);
if(x>0&&x<n)
{
arr[cnt++]=x;
}
}
for(int i=0;i<cnt;i++)
{
dfs(i,arr[i],1);
}
printf("%d\n",ans);
}
return 0;
}