extern crate bigint;
use bigint::U256;
fn main() {
let p = U256::from_dec_str(
"38873241744847760218045702002058062581688990428170398542849190507947196700873"
).expect("p to be a good number in the example");
let p_minus_1 = (p - 1u64.into()) % p;
let p_plus_1 = (p + 1u64.into()) % p;
let sum = (p_minus_1 + p_plus_1) % p;
assert_eq!(sum, 0.into());
let p_minus_1 = (p - 1u64.into()) % p;
let sum = (p_minus_1 + p_minus_1) % p;
assert_eq!(sum, p - 2.into());
let p_minus_1 = (p - 1u64.into()) % p;
let multiplicator = 3;
let mul = {
let mut result = p_minus_1;
for _ in 0..multiplicator-1 {
result = (p_minus_1 + result) % p;
}
result
};
assert_eq!(mul, p - 3.into());
}