題目
傳送門 to VJ
題目概要
求這個集合中第 k 小的值:{x∈Z∣∣μ(x)=0,x=1}
數據範圍與約定
數據組數 T≤50 ,k≤109 。
思路
其實蠻簡單一道題? 我一開始想,每個質因數的指數不超過 1 ,那麼最多只需要 30 個質數。於是我把最小的 30 個質數乘起來,發現爆 longlong 了,以爲不可做……
仔細想想,只用前 30 個質數固然可以湊出 k 個數,但是使用其他的質數,也可以得到一些數字,並且比只用前 30 個質數的最大數更小。用一個非常粗略的估計:x 以內的質數個數約爲 lnxx ,在這個值大於 109 的時候,就一定可行了。x=1011 時,已經滿足,顯然真正的第 109 個數會小很多。
既然上界是有限的,就可以進行二分。既然不能含有平方因子,就直接做容斥,p1∈P∑⌊p12n⌋−p1,p2∈P∑⌊p12p22n⌋+⋯
就可以用到 μ 了,可以寫成 x=2∑+∞μ(x)⌊x2n⌋
複雜度就是 O(nlogn) ,n 是答案。
代碼
這位召喚師設置了查閱權限哦~