use ibig::prelude::*;
fn product(a: u32, b: u32) -> UBig {
if b == a + 1 {
UBig::from(a)
} else {
let mid = a + (b - a) / 2;
product(a, mid) * product(mid, b)
}
}
fn main() {
let n: u32 = 1000000;
let factorial = product(1, n + 1);
println!("{}! = {:#x}", n, factorial);
}