Floor Sum
1func floorSum(n, m, a, b int) int {
2 ans := 0
3 if a >= m {
4 ans += (n - 1) * n * (a / m) / 2
5 a %= m
6 }
7 if b >= m {
8 ans += n * (b / m)
9 b %= m
10 }
11
12 yma := (a*n + b) / m
13 if yma == 0 {
14 return ans
15 }
16 xma := yma*m - b
17 ans += (n - (xma+a-1)/a) * yma
18 ans += floorSum(yma, a, m, (a-xma%a)%a)
19 return ans
20}
21