无关
无关(relationship)
dfs实现多集合容斥原理
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 30;
ll L, R; int k;
ll tol = 0;
vector<int> a(N);
void dfs(int d, int id, ll large, ll x) {
if(large > R) return;
if(d == 0) {
ll l = ((L - 1) / large + 1) * large;
ll r = (R / large) * large;
if(l <= r) tol += x * ((r - l) / large + 1);
return;
}
for(int i = id; i <= k; i ++) {
dfs(d - 1, i + 1, lcm(large, a[i]), x);
}
}
void solve() {
cin >> L >> R >> k;
for(int i = 1; i <= k; i ++) cin >> a[i];
for(int i = 1; i <= k; i ++) {
ll x = (i & 1 ? 1 : -1);
dfs(i, 1, 1, x);
}
cout << R - L - tol + 1 << "\n";
}
int main() {
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
solve();
return 0;
}

浙公网安备 33010602011771号