bzoj2440 中山市選2011 完全平方數

2022-08-20 18:27:12 字數 838 閱讀 9431

bzoj 2440

【題意】

求第k個約數不含平方數的數 (1<=k<=10^9),

共有t組資料(t<=50)。

【題解】

首先題解並不是我獨立思考的結果(我是蒟蒻qwq)。。。

設f(n)表示小於等於n的滿足所求數性質的數的個數,顯然滿足單調性,所以可以考慮二分答案吧。

然後考慮求出f(n)。

怎麼求呢?利用容斥思想,減去含1個質數乘積平方因數的數個數,加上含2個質數乘積平方因數的數個數,再減去含三個質數乘積平方因數的數個數……

簡單來說就是∑i=

1⌊n⌋

μ(i)

⋅⌊ni

2⌋'>∑⌊n√⌋i=1μ(i)⋅⌊ni2⌋

∑i=1⌊n⌋μ(i)⋅⌊ni2⌋,

μ函式就是容斥係數,如果n的約數中同個質數的指數大於1,μ(n)值為0,含奇數個質數約數就為-1,含偶數個就為1。

μ函式的話可以用線性篩預處理出吧。

答案不會超過2*n,神奇啊(我是蒟蒻不會證)。。。

時間複雜度o(t*sqrt(n))

#include

#include

#define n 50010

using namespace std;

int q,l,r,o,n,mu[n],prime[n],cnt;

bool flag[n];

void pre()}}

bool check()

int main()

cout

bzoj2440 中山市選2011 完全平方數

time limit 10 sec memory limit 128 mb submit 2219 solved 1067 submit status discuss description 小 x 自幼就很喜歡數。但奇怪的是,他十分討厭完全平方數。他覺得這些 數看起來很令人難受。由此,他也討厭所有...

BZOJ2440 中山市選2011 完全平方數

求第k個非完全平方數 先二分一下,問題變成1 x有多少個非完全平方數,知道平方數的集合,可以容斥一下 為了敘述方便,下文乙個數可代表其平方的倍數的集合 被乙個集合包含的只有質數,被兩個集合包含的是質因數個數為2的數 而且所有考慮的數都不含平方因子,可以發現和 一樣,被考慮進去的數的 值就是他的係數 ...

bzoj2440 中山市選2011 完全平方數

莫比烏斯函式的應用 首先二分答案轉成判定性問題,判定乙個 1,n 有多少數不是完全平方數的倍數。乙個數是完全平方數的充要條件是它包含了某個素數的平方。那麼應用容斥,符合條件的數的個數 n n4 n 9 n25 n36.容易發現,如果乙個數是某個素數的平方,那麼它的係數一定是 1 如果是兩個素數平方的...