[BZOJ2440]完全平方數

題目

傳送門 to VJ

題目概要
求這個集合中第 kk 小的值:{xZμ(x)0,x1}\big\{x\in\Z\big|\mu(x)\ne 0,x\ne 1\big\}

數據範圍與約定
數據組數 T50T\le 50k109k\le 10^9

思路

其實蠻簡單一道題? 我一開始想,每個質因數的指數不超過 11 ,那麼最多只需要 3030 個質數。於是我把最小的 3030 個質數乘起來,發現爆 long  longlong\;long 了,以爲不可做……

仔細想想,只用前 3030 個質數固然可以湊出 kk 個數,但是使用其他的質數,也可以得到一些數字,並且比只用前 3030 個質數的最大數更小。用一個非常粗略的估計:xx 以內的質數個數約爲 xlnx\frac{x}{\ln x} ,在這個值大於 10910^9 的時候,就一定可行了。x=1011x=10^{11} 時,已經滿足,顯然真正的第 10910^9 個數會小很多。

既然上界是有限的,就可以進行二分。既然不能含有平方因子,就直接做容斥,p1Pnp12p1,p2Pnp12p22+\sum_{p_1\in P}\left\lfloor\frac{n}{p_1^2}\right\rfloor-\sum_{p_1,p_2\in P}\left\lfloor\frac{n}{p_1^2p_2^2}\right\rfloor+\cdots

就可以用到 μ\mu 了,可以寫成 x=2+μ(x)nx2\sum_{x=2}^{+\infty}\mu(x)\left\lfloor\frac{n}{x^2}\right\rfloor

複雜度就是 O(nlogn)\mathcal O(\sqrt{n}\log n)nn 是答案。

代碼

這位召喚師設置了查閱權限哦~
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章