天天看点

牛客练习赛8 E-集合中的质数 容斥原理

题目链接

https://www.nowcoder.com/acm/contest/39/E

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<string>
#include<queue>
#include<stack>
#include<set>
#include<map>
#define ll long long
using namespace std;
const int INF = (  ) + ;
const ll maxn = ;
ll a[];
int main()
{

    ll n,m;
    scanf("%lld%lld",&n,&m);
    for(int i=;i<=n;i++)
    scanf("%lld",&a[i]);
    ll ans=;
    sort(a+,a++n);
    int len = unique(a+,a++n) - (a+);

    ll s = <<len;
    for(int i=;i<s;i++)
    {
        int cnt=;
        int tmp = i;
        ll mul=;
        for(int j=;j<len;j++)
        {
            int bit = (tmp>>j)&;
            if(bit){
                cnt++;
                mul*=a[j+];
            }
        }
        if(cnt%)ans += m/mul;
        else ans -= m/mul;
    }
    printf("%lld",ans);
}
           

继续阅读