scalable power
This commit is contained in:
parent
bd2b51628e
commit
1593431898
|
|
@ -11,13 +11,25 @@ open Scalable_basic_arithmetics
|
|||
@param x base, a bitarray
|
||||
@param n exponent, a non-negative bitarray
|
||||
*)
|
||||
let pow x n = []
|
||||
let pow x n =
|
||||
let rec pow_rec x1 n =
|
||||
match n with
|
||||
[] -> x1
|
||||
| n -> pow_rec (mult_b x1 x) (diff_b n [0;1])
|
||||
in pow_rec [0;1] n;;
|
||||
|
||||
(** Fast bitarray exponentiation function. Logarithmic complexity.
|
||||
@param x base, a bitarray
|
||||
@param n exponent, a non-negative bitarray
|
||||
*)
|
||||
let power x n = []
|
||||
let power x n =
|
||||
if n = [] then [0;1] else
|
||||
let rec power_rec x1 n =
|
||||
match n with
|
||||
[0;1] -> x1
|
||||
| n when mod_b n [0;0;1] = [] -> power_rec (mult_b x1 x1) (quot_b n [0;0;1])
|
||||
| n -> mult_b x1 (power_rec (mult_b x1 x1) (quot_b (diff_b n [0;1]) [0;0;1]))
|
||||
in power_rec x n;;
|
||||
|
||||
(* Modular expnonentiation ; modulo a given natural (bitarray without
|
||||
sign bits).
|
||||
|
|
@ -28,7 +40,17 @@ let power x n = []
|
|||
@param n exponent, a non-negative bitarray
|
||||
@param m modular base, a positive bitarray
|
||||
*)
|
||||
let mod_power x n m = []
|
||||
let mod_power x n m =
|
||||
if n = [] then
|
||||
[0;1]
|
||||
else
|
||||
let rec mod_power_rec c e =
|
||||
let c = mod_b (mult_b x c) m
|
||||
in if (<<) e n then
|
||||
mod_power_rec c (add_b e [0;1])
|
||||
else
|
||||
c
|
||||
in mod_power_rec [0;1] [0;1];;
|
||||
|
||||
(* Making use of Fermat Little Theorem for very quick exponentation
|
||||
modulo prime number.
|
||||
|
|
@ -40,4 +62,8 @@ let mod_power x n m = []
|
|||
@param n exponent, a non-negative bitarray
|
||||
@param p prime modular base, a positive bitarray
|
||||
*)
|
||||
let prime_mod_power x n p = []
|
||||
let prime_mod_power x n p =
|
||||
if x = [] then
|
||||
[]
|
||||
else
|
||||
mod_power x (mod_b n (diff_b p [0;1])) p;;
|
||||
|
|
|
|||
Loading…
Reference in New Issue