pub fn floor_sum(n: u64, a: u64, b: u64, m: u64) -> u64Expand description
Sum of Floor of Linear mod 2^64
$$\sum_{i=0}^{n-1}\left\lfloor\frac{a\times i+b}{m}\right\rfloor$$
Examples found in repository?
More examples
crates/competitive/src/math/floor_sum.rs (line 124)
101pub fn floor_sum_i64(l: i64, r: i64, a: i64, b: i64, m: u64) -> i64 {
102 let mut ans = Wrapping(0i64);
103 let (n, m, a, b) = (
104 Wrapping((r - l) as u64),
105 m as i64,
106 a,
107 (Wrapping(l) * a + b).0,
108 );
109 let a = if a < 0 {
110 let r = a.rem_euclid(m);
111 let nc2 = choose2(n);
112 ans -= Wrapping(nc2.0 as _) * ((Wrapping(r) - a) / m);
113 r
114 } else {
115 a
116 };
117 let b = if b < 0 {
118 let r = b.rem_euclid(m);
119 ans -= Wrapping(n.0 as _) * ((Wrapping(r) - b) / m);
120 r
121 } else {
122 b
123 };
124 (ans + floor_sum(n.0, a as u64, b as u64, m as u64) as i64).0
125}