euler/src/bin/problem_30.rs
2024-11-18 11:29:52 +01:00

29 lines
628 B
Rust

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()
}