Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 27s
Fast exponentiation by squaring with modular reduction:
let rec pow_mod base exp m =
if exp = 0 then 1
else if exp mod 2 = 0 then
let half = pow_mod base (exp / 2) m in
(half * half) mod m
else
(base * pow_mod base (exp - 1) m) mod m
Even exponent halves and squares (O(log n)); odd decrements and
multiplies. mod-reduction at each step keeps intermediates bounded.
pow_mod 2 30 1000003 + pow_mod 3 20 13 + pow_mod 5 17 100 = 738639
84 baseline programs total.
12 lines
259 B
OCaml
12 lines
259 B
OCaml
let rec pow_mod base exp m =
|
|
if exp = 0 then 1
|
|
else if exp mod 2 = 0 then
|
|
let half = pow_mod base (exp / 2) m in
|
|
(half * half) mod m
|
|
else
|
|
(base * pow_mod base (exp - 1) m) mod m
|
|
|
|
;;
|
|
|
|
pow_mod 2 30 1000003 + pow_mod 3 20 13 + pow_mod 5 17 100
|