Problem
Solution
考慮到\(\lfloor \frac {km}n\rfloor\)等同於\(km\)整除\(n\),換種表示方法就是\(km\)減去\(km\)模\(n\)的餘數,再除以\(n\)
那麼原式等價於:
\[\sum_{k=1}^n\frac {km-(km \bmod n)}n\]
這時那根分數線代表的除法是沒有餘數的除法,不受到餘數的幹擾,所以我們將其提出來:
\[\frac {\sum_{k=1}^nkm-(km\bmod n)}n\]
我們再將sigma裏面的東西拆開,得到:
\[\frac {m\sum_{k=1}^nk}n-\frac {\sum_{k=1}^n(km\bmod n)}n\]
左邊的式子我們可以用等比數列求和公式求得\(\frac {m\sum_{k=1}^nk}n=\frac {m(n+1)}2\)
接下來我們考慮右邊的式子,由於求餘操作在求和的裏面,所以不能先求和再整體取餘(前者結果可能大於等於n,後者結果嚴格小於n)
但是我們發現\(k\)的上線是\(n\),正好是我們的模數,即當\(k=n\)時,\(km\bmod n=0\);再考慮到當\(k=0\)時,\(km\bmod n=0\);即\(km\bmod n\)的循環節一定是\(n\)的約數,再根據裴蜀定理,\(km\)在模\(n\)意義下關於\(k\)的循環節爲\(n\)和\(m\)的最大公約數,我們設爲\(d\)(即\(k\)加上\(d\)的倍數,相應的\(km\bmod n\)的值仍然相等)
在上面的條件下,我們發現\(km\bmod n\)的取值集合爲\(\{td|t\in [0,\frac nd)\}\),而且在一個循環節下集合內的每個數都會取到一次
考慮到循環節長度爲\(\frac nd\),而且\(d\)一定爲\(n\)的約數,所以\(k\)取\(1\)到\(n\),可以得到\(d\)個循環節
所以我們只要將一個循環節內的所有數加起來,乘以\(d\)即爲右邊式子的答案,集合內元素和用求和公式,爲\(\frac {(0+n-d)\frac nd}2\),再乘以循環節數量\(d\),除以原來就要除的\(n\),得到\(\frac {n-d}2\)
結合左邊和右邊的式子,最終答案爲\(\frac {m(n+1)}2-\frac {n-d}2=\frac {nm+m-n+d}2\)
式子都這麼短了,代碼就不貼了啦