RosettaCodeData/Task/Iterated-digits-squaring/Rust/iterated-digits-squaring-2....

23 lines
495 B
Plaintext

fn dig_sq_sum(mut num : usize ) -> usize {
let mut sum = 0;
while num != 0 {
sum += (num % 10).pow(2);
num /= 10;
}
sum
}
fn last_in_chain(num: usize) -> usize {
match num {
0 => 0,
1 | 89 => num,
_ => last_in_chain(dig_sq_sum(num)),
}
}
fn main() {
let prec: Vec<_> = (0..649).map(|n| last_in_chain(n)).collect();
let count = (1..100_000_000).filter(|&n| prec[dig_sq_sum(n)] == 89).count();
println!("{}", count);
}