const fn gcd(a: u32, b: u32) -> u32 {
match (a, b) {
(x, 0) | (0, x) => x,
(x, y) if x % 2 == 0 && y % 2 == 0 => 2*gcd(x/2, y/2),
(x, y) | (y, x) if x % 2 == 0 => gcd(x/2, y),
(x, y) if x < y => gcd((y-x)/2, x),
(x, y) => gcd((x-y)/2, y),
}
}
const fn fib(n: u128) -> u128 {
const fn helper(n: u128, a: u128, b: u128, i: u128) -> u128 {
if i <= n {
helper(n, b, a + b, i + 1)
} else {
b
}
}
helper(n, 1, 1, 2)
}
const X: u128 = fib(10);
const GCD: u32 = gcd(21, 7);
fn main(){
println!("{}", X);
println!("{}", GCD);
}