首页 > 代码库 > hdu1796:容斥入门题
hdu1796:容斥入门题
简单的容斥入门题。。
容斥基本的公式早就知道了,但是一直不会写。
下午看到艾神在群里说的“会枚举二进制数就会容斥”,后来发现还真是这样。。
然后直接贴代码了
#include <iostream>#include <stdio.h>#include<string.h>#include<algorithm>#include<string>#include<ctype.h>using namespace std;long long m,n,a[15];long long gcd(long long a,long long b){ return b?gcd(b,a%b):a;}long long lcm(long long a,long long b){ return a/gcd(a,b)*b;}void ini(){ for(int i=0;i<n;i++) { scanf("%I64d",a+i); if(a[i]<1) { n--;i--; //此题输入中可能有0 } }}long long iae(){ long long res=0; for(int i=1;i<(1<<n);i++) { long long mut=1,tmp=0; for(int j=0;j<n;j++) { if(i&(1<<j)) { tmp++; mut=lcm(mut,a[j]); } } if(tmp&1) { res+=(m-1)/mut; } else { res-=(m-1)/mut; } } return res;}void solve(){ printf("%I64d\n",iae());}int main(){ while(scanf("%I64d%I64d",&m,&n)!=EOF) { ini(); solve(); } return 0;}
hdu1796:容斥入门题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。