HDU3388 二分 容斥原理

2021-06-17 18:36:53 字數 1279 閱讀 6188

題目:coprime

題意:給三個數m,n,k, 0

思路:二分+容斥原理

由於所找的數與m,n互質,那麼這個數不能含有m,n所包含的素因子。但是k很大,

不可能乙個乙個生成。於是二分,找到最小

的x,使得小於或等於x的數中滿足條件的

數的個數大於或等於k,則這個最小值即為答案。

在判斷小於或等於x的數中滿足條件的數

的個數時,可用容斥原理找出這些數中是m,n所含質因子倍數的數的個數。x減去所得

個數即為

小於或等於x的數中滿足條件的數的個數。

#include #include #include #include using namespace std;

typedef long long ll;

const int n=1000005;

const ll inf=(ll)1<<62;

bool prime[n];

ll p[n];

ll fac[n];

ll k,cnt,num,ans,n,m,k;

void isprime()

}if(m>1)

fac[cnt++]=m;

}void dfs(ll k,ll t,ll s,ll n)

dfs(k+1,t,s,n);

dfs(k+1,t+1,s*fac[k],n);

}ll binary()

else

l=mid+1;

}return ret;

}int main()

solve(m,n);

sort(fac,fac+cnt);

num=1;

for(ll i=1; i}

ct=num;

printf("%i64d\n",binary());

}return 0;

}

hdu3388Coprime 二分 容斥原理

找第k個和n,m互質的數 由容斥原理可得 在 1,x 範圍內且與n不互質的數的個數為 對於所有的n的素數因子 和乙個素數因子不互質的個數 兩個素數因子相乘的個數 三個素數因子相乘的個數 對於x越大,在 1 x 範圍內的與n,m互質的數越多,所以存在單調性,可以用二分找到剛好有k個數和n,m互質 in...

HDU3388 Coprime(二分 容斥)

題意 給你n m n,mn,m,讓你找到第k kk個與n nn和m mm互素的數。思路 範圍比較大,我們可以先找出n nn和m mm的質因子,然後二分答案。每次容斥判定mid midmi d是第幾個與n nn和m mm互質的數字。include include include include inc...

POJ 2773 二分 容斥原理

給m k 求與m互質的第k個數 1 m 1000000 k 1 k 100000000 k比較大,對於乙個數n,1到n以內和m互質的數可以通過容斥原理很快算出來,並且隨n遞增 因此二分k就好了 include include include include include includeusing ...