傳送門
求第$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 在上面那個式子...