29 lines
628 B
Rust
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()
|
|
}
|