无关(容斥原理)
题目
题意分析
要求得[L, R]中有多少个数是于集合A中的元素无关,我们可以先反过来求[L, R]中
有多少个数有关,很显然用容斥原理就可以解决,其中再用二进制枚举就好。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[25];
int main(){
ll l, r, k;
cin >> l >> r >> k;
for (int i = 0; i < k; i++)
cin >> a[i];
ll sum, cnt, ans;
sum = ans = 0;
cnt = 1;
for (int i = 1; i < (1 << k); i++){
ans = 0, cnt = 1;
for (int j = 0; j < k; j++){
if(i & (1 << j)){
cnt *= a[j];
ans++;
if(cnt > r)
break;
}
}
if(ans & 1)
sum += r / cnt - (l - 1) / cnt;
else
sum -= r / cnt - (l - 1) / cnt;
}
ans = r - (l - 1) - sum;
cout << ans << endl;
return 0;
}