无关

无关(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;
}
posted @ 2026-09-25 09:21  thenrify  阅读(7)  评论(0)    收藏  举报