題目大意:求第 k 個無平方因子數。
題解:第 k 小/大的問題一般採用二分的方式,通過判定從 1 到當前數中滿足某一條件的數有多少個來進行對上下邊界的轉移。
考慮莫比烏斯函式的定義,根據函式值將整數分成了三類,第一類是有平方因子的數,第二類是無平方因子且質因子個數為奇數的數,第三類是無平方因子且質因子個數為偶數的數。我們要求的是$$\sum\limits_n\mu2(i)$$考慮莫比烏斯函式劃分出的三類整數對答案的貢獻,發現對於乙個數 \(p\) 對答案的貢獻為 \((-1)^s\lfloor \rfloor\),觀察到每個數的莫比烏斯函式剛好是其對答案貢獻的係數,因此可以在 \(o(\sqrt n)\) 時間內進行答案判定,總複雜度為 \(o(\sqrt n logn)\)。
**如下
#include using namespace std;
typedef long long ll;
const int maxn=1e6+10;
ll k;
int mu[maxn],prime[maxn],tot;
bool vis[maxn];
void seive() }}
ll calc(ll mid)
ll solve()
return l;
}int main()
return 0;
}
洛谷p4318 完全平方數
小 x 自幼就很喜歡數。但奇怪的是,他十分討厭完全平方數。他覺得這些數看起來很令人難受。由此,他也討厭所有是完全平方數的正整數倍的數。然而這絲毫不影響他對其他數的熱愛。這天是小x的生日,小 w 想送乙個數給他作為生日禮物。當然他不能送乙個小x討厭的數。他列出了所有小x不討厭的數,然後選取了第 k個數...
洛谷P4318 完全平方數
求自然數中,第 k 個不含平方因子的數 這道題的做法還挺多的 打表,二分,反演.我用的做法是二分 容斥 顯然答案滿足二分性,假設當前檢驗的數為 n 沒有平方因子的數 所有數 乙個質數平方的因子的倍數 兩個質數乘積平方的倍數 三個的.對於乙個數 i 2 可以發現 mu i 就是 i 2 在上面那個式子...
P4318 完全平方數
想不出什麼辦法能直接算的 別跟我提分塊打表 不如二分答案吧 設 f x sum n i不是 完全平方數 顯然f x 與x正相關。再結合篩法 容斥,不難得到 f x sum mu i lfloor frac rfloor 找到那個滿足f x k的x就行了。include define int long...