【容斥】牛客小白月賽5——A
阿新 • • 發佈:2018-11-06
無關(relationship)
https://www.nowcoder.com/acm/contest/135/A
題目描述
若一個集合A內所有的元素都不是正整數N的因數,則稱N與集合A無關。
給出一個含有k個元素的集合A={a1,a2,a3,...,ak},求區間[L,R]內與A無關的正整數的個數。
保證A內的元素都是素數。
輸入描述:
輸入資料共兩行: 第一行三個正整數L,R,k,意義如“題目描述”。 第二行k個正整數,描述集合A,保證k個正整數兩兩不相同。
輸出描述:
輸出資料共一行: 第一行一個正整數表示區間[L,R]內與集合A無關的正整數的個數
示例1
輸入
1 10 4 2 3 5 7
輸出
1
輸入
2 10 4 2 3 5 7
輸出
0
說明
對於30%的資料:1<=L<=R<=10^6 對於100%的資料:1<=L<=R<=10^18,1<=k<=20,2<=ai<=100
#include<bits/stdc++.h> using namespace std; #define ll long long ll a[22]; ll check(ll l, ll r, ll x) { return r/x-(l-1)/x; } int main() { ll l,r;int k; scanf("%lld%lld%d",&l,&r,&k); for(int i=0;i<k;i++) scanf("%lld",&a[i]); ll ans=0; for(int s=0;s<(1<<k);s++) { ll c=1,cnt=0; int flag=0; for(int j=0;j<k;j++) { if(s>>j&1) { if(c*a[j]<c) flag=1; c*=a[j],cnt++; } } if(flag) continue; if(cnt%2) ans-=check(l,r,c); else ans+=check(l,r,c); } printf("%lld\n",ans); return 0; }