您的位置:首页 > 其它

HDU 1796 容斥原理

2015-08-03 09:48 330 查看
点击打开题目链接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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: