洛谷P4318 完全平方數(容斥,莫比烏斯反演)

2022-02-27 23:43:04 字數 890 閱讀 5010

傳送門

求第$k$個沒有完全平方數因數的數

一開始是想篩一波莫比烏斯函式,然後發現時間複雜度要炸

於是老老實實看了題解

乙個數的排名$k=x-\sum_^$

因為$k$是不降的,所以我們可以考慮二分

那麼如何計算區間$[1,x]$的無完全平方數因數的數的個數嘞?

我們可以考慮計算有平方因數的數的個數再減掉就可以了

那麼這個可以用乙個容斥計算,就是0個完全平方數因數的個數(即1的倍數)-1個完全平方數因數個數(即4,9,16...的倍數)+2個...

然後不難發現這個容斥裡每一項的係數是$\mu(i)$(別問我我也不知道)

然後帶進去瞎搞就好了

1

//minamoto

2 #include3 #include4 #include5

using

namespace

std;

6#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?eof:*p1++)

7char buf[1

<<21],*p1=buf,*p2=buf;

8 inline int

read()

18const

int n=5e4+5;19

intvis[n],p[n],mu[n],m;

20void

init()29}

30}31 inline int work(int

k)37

intmain()

49 printf("

%d\n

",ans);50}

51return0;

52 }

洛谷 P4318 完全平方數 二分 容斥

首先我們可以二分答案。然後轉變為判斷 mid 以內不討厭的數和 k 的關係。mid 以內不討厭的數 mid mid 以內討厭的數 對於討厭的數我們可以列舉 i 看 i 2 會造成多少個討厭的數,顯然是 displaystyle left lfloor frac right rfloor 然後我們發現...

洛谷p4318 完全平方數

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

洛谷P4318 完全平方數

求自然數中,第 k 個不含平方因子的數 這道題的做法還挺多的 打表,二分,反演.我用的做法是二分 容斥 顯然答案滿足二分性,假設當前檢驗的數為 n 沒有平方因子的數 所有數 乙個質數平方的因子的倍數 兩個質數乘積平方的倍數 三個的.對於乙個數 i 2 可以發現 mu i 就是 i 2 在上面那個式子...