bzoj2440 中山市選2011 完全平方數

2021-07-10 16:36:20 字數 1766 閱讀 1683

time limit: 10 sec memory limit: 128 mb

submit: 2219 solved: 1067

[submit][status][discuss]

description

小 x 自幼就很喜歡數。但奇怪的是,他十分討厭完全平方數。他覺得這些

數看起來很令人難受。由此,他也討厭所有是完全平方數的正整數倍的數。然而

這絲毫不影響他對其他數的熱愛。

這天是小x的生日,小 w 想送乙個數給他作為生日禮物。當然他不能送一

個小x討厭的數。他列出了所有小x不討厭的數,然後選取了第 k個數送給了

小x。小x很開心地收下了。

然而現在小 w 卻記不起送給小x的是哪個數了。你能幫他一下嗎?

input

包含多組測試資料。檔案第一行有乙個整數 t,表示測試

資料的組數。

第2 至第t+1 行每行有乙個整數ki,描述一組資料,含義如題目中所描述。

output

含t 行,分別對每組資料作出回答。第 i 行輸出相應的

第ki 個不是完全平方數的正整數倍的數。

sample input

4 1

13 100

1234567

sample output

1 19

163

2030745

hint

對於 100%的資料有 1 ≤ ki ≤ 10^9, t ≤ 50

先二分答案,對於乙個二分到的答案,我們可以先考慮怎樣去暴力判斷。

假設當前二分到的答案是mid,那麼不符合條件的數ans=∑m

id√p

∈pri

memi

dp2 。這個式子算出來會有多的情況。比如說對於符合條件的,mi

dp1∗

p2這個數就會在p1

,p2 的時候被計算2遍。所以要減去這種兩兩質數的情況。

再考慮三個的時候:mi

dp1∗

p2∗p

3 這個數在開始算的時候被算了3次,在上一步減去的時候又被減了三次,所以應該再加乙個。

這樣當有k個的時候,需要算的就是(−

1)km

idp1

∗p2∗

...∗

pk我們發現這個容斥跟莫比烏斯函式表示的東西是一樣的,我們設d是若干個質數的乘積,那麼上面的式子就變成了:μ(

d)mi

dd然後我們對於每乙個二分的答案,只要從(2

,mid

−−−−

√)列舉,用

μ 計算一下就好了。

#include

#include

#include

using

namespace

std;

#define mid (l+r)/2

#define ll long long

const

int n=100000;

bool flag[n+10];

int t,u[n+10],prime[n+10],k;

inline

void prepare()

for(j=1;j<=prime[0]&&i*prime[j]<=n;++j)

u[i*prime[j]]=-u[i];}}

}inline

bool check(ll x)

printf("%lld\n",l);

}}

BZOJ2440 中山市選2011 完全平方數

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

bzoj2440 中山市選2011 完全平方數

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

bzoj2440 中山市選2011 完全平方數

題目鏈結 求第k kk個不含平方因子的自然數。預處理出 x x k mu x x leq sqrt k x x k 二分答案ans ansan s,則問題轉化為求不大於ans ansan s的不含平方因子的自然數個數xxx。根據容斥原理。x i 1a ns i an si 2x sum frac x...