无关(容斥原理)

无关(容斥原理)

题目

题意分析

要求得[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;
}

猜你喜欢

转载自blog.csdn.net/qq_45964820/article/details/114670831
今日推荐