use std::collections::HashMap; fn main() { let mut nkm = String::new(); std::io::stdin().read_line(&mut nkm).ok(); let nkm: Vec = nkm.trim().split_whitespace().map(|s| s.parse().unwrap()).collect(); let n = nkm[0]; let k = nkm[1]; let m = nkm[2]; let mut factors = HashMap::new(); let mut base = m; for i in 2..=(m as f64).sqrt().floor() as usize { while base % i == 0 { base /= i; *factors.entry(i).or_insert(0usize) += 1; } } if base > 1 { factors.insert(base, 1); } let startn = n - k; let endn = n; let startd = 0; let endd = k; let mut result = 1usize << 60; for (&val, &cnt) in factors.iter() { let mut num_cnt = 0usize; let mut denom_cnt = 0usize; let mut base = val; while endd / base > startd / base { denom_cnt += endd / base - startd / base; base *= val; } let mut base = val; while endn / base > startn / base { num_cnt += endn / base - startn / base; base *= val; } result = result.min((num_cnt - denom_cnt) / cnt); } println!("{}", result); }