首页 > 代码库 > HDU 1796
HDU 1796
呃,我竟然傻了,同时被a且b整除的个数为n/(a*b)。
其实应该是n/[a,b]才对,是他们的最小公倍数啊。。。
#include <iostream>#include <cstdio>#include <algorithm>using namespace std;__int64 ans;__int64 set[30];__int64 n;int m;__int64 gcd(__int64 a,__int64 b){ if(b==0) return a; return gcd(b,a%b);}void dfs(int i,int num,__int64 tmp){ if(i>=m){ if(num==0){ ans=0; } else { if(num&1){ ans=(ans+n/tmp); } else{ ans=ans-n/tmp; } } return ; } dfs(i+1,num,tmp); dfs(i+1,num+1,tmp*set[i]/gcd(tmp,set[i]));}int main(){ bool flag; while(scanf("%I64d%d",&n,&m)!=EOF){ n--; flag=true; int k=0; for(int i=0;i<m;i++){ scanf("%I64d",&set[i]); if(set[i]) set[k++]=set[i]; } m=k; ans=0; dfs(0,0,1); printf("%I64d\n",ans); } return 0;}
HDU 1796
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。