hdu 1796 容斥原理

xiaoxiao2021-02-28  60

题目链接:点击打开链接

被这个0坑了好久,题目有矛盾,注意这个0就OK了。

题解:

#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; int n,m; int num[25]; int gcd(int a,int b){ return b==0? a:gcd(b,a%b); } ll solve(){ ll ans=0; for(int i=1;i<(1<<m);i++){ int sum=1,cnt=0; for(int j=0;(1<<j)<=i;j++){ if((1<<j)&i){ cnt++; sum=sum/gcd(sum,num[j])*num[j]; } } if(cnt&1) ans+=(n-1)/sum; else ans-=(n-1)/sum; } return ans; } int main(){ while(cin>>n>>m){ for(int i=0;i<m;i++){ scanf("%d",num+i); if(num[i]==0) m--,i--; } printf("%lld\n",solve()); } return 0; }

转载请注明原文地址: https://www.6miu.com/read-40573.html

最新回复(0)