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}