Skip to content

Commit 6e2b258

Browse files
committed
Improve floor_sum
1 parent d77536e commit 6e2b258

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

atcoder/math.hpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,11 @@ long long floor_sum(long long n, long long m, long long a, long long b) {
9090
b %= m;
9191
}
9292

93-
long long y_max = (a * n + b) / m, x_max = (y_max * m - b);
94-
if (y_max == 0) return ans;
95-
ans += (n - (x_max + a - 1) / a) * y_max;
96-
ans += floor_sum(y_max, a, m, (a - x_max % a) % a);
93+
long long y_max = a * (n - 1) + b;
94+
if (y_max < m) return ans;
95+
long long y_max_div = y_max / m;
96+
long long y_max_mod = y_max % m;
97+
ans += y_max_div + floor_sum(y_max_div, a, m, y_max_mod);
9798
return ans;
9899
}
99100

0 commit comments

Comments
 (0)