題目很裸,求∑i=1~n⌊n/i⌋
這個東西可以直接暴力o(n),但對於這個複雜度來說顯然不優秀
直接列舉的話會發現很多項的值都是相同的,而且呈塊狀分布,那麼就可以用道整除分塊來解決
有一篇部落格講了證明寫的還行
好了現在我們就可以在sqrt(n)的時間內求出這個值了
然鵝整除分塊經常套這莫反,有時需要求mu或者phi的字首和,就需要用到杜教篩,然後我不會就溜了
結論:乙個值相同的塊的最後乙個元素是n/(n/i)
貼**走人
#include#include#include#includeusing namespace std;
int n;
long long ans = 0;
int main()
cout << ans << endl;
return 0;
}
整除分塊(數論分塊)
乙個有 趣的問題 求 sum n lfloor frac ni rfloor n leq 10 顯然不能直接做廢話 經過一番冷靜推理暴力打表 我們發現以下性質 1.large lfloor frac ni rfloor 最多只有 2 sqrt 種取值 證明 對於 i le sqrt,只有 sqrt ...
BZOJ1257 餘數之和,整除分塊
給出正整數n和k,計算j n,k k mod 1 k mod 2 k mod 3 k mod n的值 其中k mod i表示k除以i的餘數。例如j 5,3 3 mod 1 3 mod 2 3 mod 3 3 mod 4 3 mod 5 0 1 0 3 3 7 輸入僅一行,包含兩個整數n,k。1 n ...
整除分塊思路
求解 i 1n n i sum n frac i 1n in 一般思路 o n 求解 但用分塊可以達到 o n sqrt n 複雜度 理解 為了避免每個 i 都計算一次,我們需要分塊 i 不同時,有 k kk 個 ni frac in 仍然相同,將他們分為一塊,貢獻即為 k ni k frac k ...