haar_lib/math/
factorial_prime_factor.rs1pub fn factorial_prime_factor(a: u64, p: u64) -> u64 {
13 let mut ret = 0;
14 let mut q = p;
15
16 while q <= a {
17 ret += a / q;
18 if let Some(q_) = q.checked_mul(p) {
19 q = q_;
20 } else {
21 break;
22 }
23 }
24
25 ret
26}
27
28#[cfg(test)]
29mod tests {
30 use super::*;
31
32 #[test]
33 fn test() {
34 for p in [2, 3, 5, 7, 11, 13] {
35 let a = 1000;
36
37 let mut ans = 0;
38
39 for mut x in 1..=a {
40 while x % p == 0 {
41 ans += 1;
42 x /= p;
43 }
44 }
45
46 assert_eq!(factorial_prime_factor(a, p), ans);
47 }
48 }
49}