Problem
Solution
考慮到(lfloor frac {km}n floor)等同於(km)整除(n),換種表示方法就是(km)減去(km)模(n)的餘數,再除以(n)
那麼原式等價於:
[sum_{k=1}^nfrac {km-(km mod n)}n
]
這時那根分數線代表的除法是沒有餘數的除法,不受到餘數的幹擾,所以將其提出來:
[frac {sum_{k=1}^nkm-(kmmod n)}n
]
再將sigma裏面的東西拆開,得到:
[frac {msum_{k=1}^nk}n-frac {sum_{k=1}^n(kmmod n)}n
]
左邊的式子等比數列求和得(frac {msum_{k=1}^nk}n=frac {m(n+1)}2)
接下來考慮右邊的式子,由於求餘操作在求和的裏面,所以不能先求和再整體取餘(前者結果可能大於等於n,後者結果嚴格小於n)
但是發現(k)的上限是(n),正好是的模數,即當(k=n)時,(kmmod n=0);再考慮到當(k=0)時,(kmmod n=0);即(kmmod n)的循環節一定是(n)的約數,再根據裴蜀定理,(km)在模(n)意義下關於(k)的循環節爲(n)和(m)的最大公約數,設爲(d)(即(k)加上(d)的倍數,相應的(kmmod n)的值仍然相等)
在上面的條件下,發現(kmmod n)的取值集合爲({td|tin [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)
式子都這麼短了,代碼就不貼了啦