题目
思路:
由于集合中均为素数,
有:
由概率加法公式(简单证明)得:
即:除以奇数个素数时加;除以偶数个素数时减。
代码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=8;
int a[30],n;ll m;
int main() {
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=0;i<n;i++)cin>>a[i];
ll ans=0;
for(int i=1;i<(1<<n);i++){
ll mm=m;int num=0;
for(int j=0;j<n;j++){//枚举每一种组合
if((i>>j)&1){
// if(i&(1<<j)){
num++,mm/=a[j];
}
}
//积加偶减
if(num&1)ans+=mm;
else ans-=mm;
}
cout<<ans;
return 0;
}