use std::collections::BTreeMap;
pub fn run() -> Result<(), Box<dyn std::error::Error>> {
let mut map = BTreeMap::new();
for mut x in 2..1000000u32 {
let (i, mut n) = (x, 0u32);
while x != 1 {
if x < i {
n += map.get(&x).unwrap();
break;
} else if x % 2 == 0 {
x /= 2;
n += 1
} else {
x = (3 * x + 1) / 2;
n += 2
}
}
map.insert(i, n);
}
let mut max = 0u32;
let mut num = 0u32;
for (k, v) in map {
if v > max {
max = v;
num = k;
}
}
println!("num = {num}, max = {max}");
Ok(())
}
[Project Euler 14]
num = 837799, max = 524
[Task finished in 0.1754473s]
不知道链长为啥不一样…… |