bzoj 2440 莫比烏斯反演應用

2021-07-10 19:21:53 字數 1552 閱讀 6153

2440: [中山市選2011]完全平方數

time limit: 10 sec  memory limit: 128 mb

[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

思路:首先我們要把完全平方數和完全平方數的倍數叉掉,  4 9 25  12 16 18 25 50  這些類似的

莫比烏斯反演的篩選函式裡面有乙個mu[i]函式,是乙個積性函式  mu[3]=-1 mu[6]=1

**:#include#include#include#include#include#include#include #include#include#include#include#include#include#define mst(ss,b) memset((ss),(b),sizeof(ss))

#define maxn 0x3f3f3f3f

#define max 1000100

///#pragma comment(linker, "/stack:102400000,102400000")

typedef long long ll;

typedef unsigned long long ull;

#define inf (1ll<<60)-1

using namespace std;

int n,cnt;

int mu[1000100],prime[1000100],vis[1000100];

void moblus()

for(int j=1;j<=cnt;j++) else mu[i*prime[j]]=-mu[i];}}

}ll solve(ll n)

return ans;

}int main(){

moblus();

/// for(int i=1;i<=60;i++) cout<

BZOJ 2440 完全平方數 莫比烏斯反演

bzoj 2440 完全平方數 參考popoqqq神的ppt 首先二分答案 問題轉化為求 1,x 之間有多少個無平方因子數 根據容斥原理可知 對於sqrt x 以內所有的質數 有 x以內的無平方因子數 0個質數乘積的平方的倍數的數的數量 1的倍數 每個質數的平方的倍數的數的數量 9的倍數,25的倍數...

bzoj 2440 (莫比烏斯函式)

bzoj 2440 完全平方數 題意 找出第k個不是完全平方數的正整數倍的數。例如 4 9 16 25 36什麼的 通過容斥原理,我們減去所有完全數 4有n 4個,但是先36這種會被重複減去,所有我們還需要加上類似36的數,然後你會發現這些數前面的符號和他們開根號的 莫比烏斯函式一樣 資料很大有1e...

BZOJ 2440 莫比烏斯函式

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