Skip to main content

ark_ff/fields/
utils.rs

1use num_bigint::BigUint;
2use num_traits::Zero;
3
4/// Calculates the k-adicity of n, i.e., the number of trailing 0s in a base-k
5/// representation.
6pub const fn k_adicity(k: u64, mut n: u64) -> u32 {
7    if n == 0 {
8        return 0;
9    }
10    let mut r = 0;
11    while n % k == 0 {
12        r += 1;
13        n /= k;
14    }
15    r
16}
17
18/// Calculates the k-adicity of n, i.e., the number of trailing 0s in a base-k
19/// representation.
20pub fn k_adicity_big_int(k: BigUint, mut n: BigUint) -> u32 {
21    if n.is_zero() {
22        return 0;
23    }
24    let mut r = 0;
25    while (&n % &k).is_zero() {
26        r += 1;
27        n /= &k;
28    }
29    r
30}