求 ans=(k%1)+(k%2)+…+(k%n)
這題目應該算是數論裡比較簡單的了 求 ∑
ni=1
kmod
i ∑i=
1nkm
od
i我們知道 a%b=a-b*(a/b) 即 ∑
ni=1
kmod
i=∑n
i=1[
k−i∗
(k/i
)]=n
∗k−∑
ni=1
i∗(k
/i) ∑i=
1nkm
odi=
∑i=1
n[k−
i∗(k
/i)]
=n∗k
−∑i=
1ni∗
(k/i
)數論中列舉形如 n/i的式子時 很大一部分 n/i 是連續不變的 我們可以分塊搞 而前面的 i 的和就可以用 等差數列求和公式求出來
分塊已經是套路了tat
bzoj 1257
luogu 2261
#include
#include
#define ll long long
int main()
printf("%lld\n",ans);
return
0;}
CQOI2007 餘數求和
題面 這道題用到了數論分塊 首先什麼是數論分塊 顧名思義就是分塊在數論上的應用 不過非常神奇的一點是你如果不會分塊但你還是可以會數論分塊的 所求為 i 1nkm od i sum k mod i i 1 n kmod i將這個式子改為 i 1nk i ki sum k i left lfloor f...
CQOI2007 餘數求和
傳送門 或許這也算是道神仙題?題目描述非常直白,我們把式子轉化一下,其實就是求n k k i i。而k i是可以使用除法分塊來做的 假設t k i,如果t 0,那麼它的末端就是n,這個很顯然,如果不等於0的話,那麼末端就是k t。之後我們就神奇的過了這道題 極短。include include in...
CQOI2007 餘數求和
給出n,k求k 1 n每乙個數的和 首先將原始式子變形成為nk k 1 1 k 2 2.k n n 此處的除法都是向下取整,也就是說不可以使用運算律了。那麼我們通過簡化式子,得到了乙個不能用運算律的式子。此時我們發現不能暴力去算他。於是嘗試著找了一會規律,可得到乙個 以100為例 相同的用顏色標記出...