use proconio::input; fn main() { input! { n: i64, } let m = (n as f64).sqrt() as usize + 1; let mut is_primes = vec![true; m]; is_primes[0] = false; is_primes[1] = false; for diviser in 2..m { if !is_primes[diviser] { continue; } for kd in (2 * diviser..m).step_by(diviser) { is_primes[kd] = false; } } println!( "{}", (2..m) .filter(|&i| is_primes[i]) .map(|i| (2..) .map(|k| (i as i64).pow(k)) .take_while(|&v| v <= n) .sum::()) .sum::() ); }