const INF: usize = 1usize << 60; fn main() { let mut n = String::new(); std::io::stdin().read_line(&mut n).ok(); let n: usize = n.trim().parse().unwrap(); let mut dp = vec![INF; n+1]; dp[1] = 0; for i in 1..n { for j in 2..=n/i { let idx = i*j; if idx > n { break; } dp[idx] = dp[idx].min(dp[i] + j); } } println!("{}", dp[n]); }