BZOJ2440 完全平方數

2022-05-20 08:56:14 字數 1279 閱讀 4170

小 x 自幼就很喜歡數。但奇怪的是,他十分討厭完全平方數。他覺得這些數看起來很令人難受。由此,他也討厭所有是完全平方數的正整數倍的數。然而這絲毫不影響他對其他數的熱愛。

這天是小x的生日,小 w 想送乙個數給他作為生日禮物。當然他不能送乙個小x討厭的數。他列出了所有小x不討厭的數,然後選取了第 k個數送給了小x。小x很開心地收下了。

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

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

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

含t 行,分別對每組資料作出回答。第 i 行輸出相應的第ki 個不是完全平方數的正整數倍的數。41

13100

1234567119

1632030745

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

首先乙個非完全平方數就是沒有任何乙個質因子的次數大於1。

所以我們用容斥來計算這個問題。設數集\(\\)表示非完全平方數的集合,則\(ans=\sum_}(-1)^}\lfloor \frac}\rfloor\)。其中\(t_表示i的質因數個數\)。

非完全平方數對答案的貢獻為0,所以我們比較容易想到莫比烏斯函式\(\mu\)。

所以答案就是\(\sum_\mu(i)\lfloor \frac}\rfloor\)。

注意:i只需要列舉到\(\sqrt k\) 就可以了。

#include#include#include#include#include#include#include#include#include#include#include#include#define ll long long

using namespace std;

inline int get() while('0'<=ch&&ch<='9') return x*f;}

int t,k;

int pri[100005];

bool vis[100005];

int mu[100005];

void pre(int n)

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

mu[i*pri[j]]=-mu[i];

} }}ll l,r,mid;

bool check(ll n)

return n-ans>=k;

}int main()

cout<} return 0;

}

BZOJ 2440 完全平方數

time limit 10 sec memory limit 128 mb submit 966 solved 457 submit status 小 x 自幼就很喜歡數。但奇怪的是,他十分討厭完全平方數。他覺得這些 數看起來很令人難受。由此,他也討厭所有是完全平方數的正整數倍的數。然而 這絲毫不影...

BZOJ2440 完全平方數

description 小 x 自幼就很喜歡數。但奇怪的是,他十分討厭完全平方數。他覺得這些 數看起來很令人難受。由此,他也討厭所有是完全平方數的正整數倍的數。然而 這絲毫不影響他對其他數的熱愛。這天是小x的生日,小 w 想送乙個數給他作為生日禮物。當然他不能送一 個小x討厭的數。他列出了所有小x不...

BZOJ 2440 完全平方數

求第k個無平方因子的數 無平方因子數,即分解質因數後所有質因數的次數都為1的數.首先轉化為判定性問題,即1 n中有多少個數為無平方因子數 二分答案.根據容斥原理可得 n以內的無平方因子數 0個質數乘積的平方的倍數的數的個數 即n 1個質數乘積的平方的倍數的數的個數 如4的倍數,9的倍數 2個質數乘積...