题意:求[1,N-1]中有多少能被集合M中的任意一个数整除。
分析:运用容斥原理解决。二进制枚举N-1中能被1个,2个...M个数整除的个数,奇加偶减。
每次N-1除以若干个数的lcm得到区间[1,N-1]中能被这若干个数整除的个数。
注意M中有可能出现0,0是不能整除任何数的,跳过即可。
#includeusing namespace std;typedef long long LL;LL gcd(LL a,LL b){ if(b==0) return a; return gcd(b,a%b);}LL lcm(LL a,LL b){ return a/gcd(a,b)*b;}LL vz[20];int main(){ #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif LL N,M; while(scanf("%lld %lld",&N,&M)==2){ N--; int tot=0; for(int i=0;i