fn pack_frac(a: u16, b: u16) -> u32Examples found in repository?
crates/competitive/src/math/fast_prime_mod.rs (line 328)
317fn build_frac<const P: u32>() -> Box<[u32]> {
318 let mut frac = vec![0; FRAC_LEN].into_boxed_slice();
319 let mut stack = vec![(0u16, 1u16, 1u16, 1u16)];
320 while let Some((a, b, c, d)) = stack.pop() {
321 let nb = b + d;
322 if nb < FRAC_DEN_LIMIT {
323 stack.push((a + c, nb, c, d));
324 stack.push((a, b, a + c, nb));
325 } else {
326 let s = (a as u64 * P as u64 / ((1u64 << FRAC_SHIFT) * b as u64)) as usize;
327 let t = (c as u64 * P as u64 / ((1u64 << FRAC_SHIFT) * d as u64)) as usize;
328 frac[s] = pack_frac(a, b);
329 frac[t] = pack_frac(c, d);
330 let a = a.min(c);
331 let b = b.min(d);
332 if s + 1 < t {
333 for x in &mut frac[s + 1..t] {
334 *x = pack_frac(a, b);
335 }
336 }
337 }
338 }
339 frac
340}