use utils::number::Number; fn main() { println!("{}", nth_powers(5)) } fn nth_powers(nth: u32) -> isize { let mut powers = vec![]; let mut max = 9isize.pow(nth); let mut idx = 1; loop { let attempt = max * idx; if Number::from(attempt).digits.len() < idx as usize { max *= idx - 1; break; } idx += 1; } for n in 2..=max { let num = Number::from(n); let digits = num.digits; let sum = digits.iter().map(|&x| x.pow(nth)).sum(); if n == sum { powers.push(n); } } powers.iter().sum() }