use std::collections::HashMap; fn calc(n: usize, dp: &mut HashMap) -> usize { if dp.get(&n).is_some() { return *dp.get(&n).unwrap(); } let a3 = calc(n/3, dp); if !dp.contains_key(&(n/3)) { dp.insert(n, a3); } let a5 = calc(n/5, dp); if !dp.contains_key(&(n/5)) { dp.insert(n/5, a5); } if !dp.contains_key(&n) { dp.insert(n, a3+a5); } a3+a5 } fn main() { let mut n = String::new(); std::io::stdin().read_line(&mut n).ok(); let n: usize = n.trim().parse().unwrap(); let mut result: HashMap = HashMap::new(); result.insert(0, 1); println!("{:?}", calc(n, &mut result)); }