pub fn nth_sylvester(n: usize) -> u128 {
if n == 0 {
2u128
} else {
let mth_sylvester = nth_sylvester(n - 1);
mth_sylvester.pow(2u32) - mth_sylvester + (1u128)
}
}
pub fn nth_sylvester_memoized(n: usize) -> u128 {
let mut sequence = vec![2];
nth_sylvester_with_memoizer(n, &mut sequence)
}
fn nth_sylvester_with_memoizer(n: usize, memoizer: &mut Vec<u128>) -> u128 {
if n < memoizer.len() {
memoizer[n].clone()
} else {
let mth_sylvester = nth_sylvester_with_memoizer(n - 1, memoizer);
let nth_sylvester = mth_sylvester.pow(2u32) - mth_sylvester + (1u128);
memoizer.push(nth_sylvester);
memoizer[n].clone()
}
}
pub fn sylvester_sequence(n: usize) -> Vec<u128> {
if n == 0 {
return vec![];
}
let mut sequence = vec![2];
nth_sylvester_with_memoizer(n - 1, &mut sequence);
sequence
}