summaryrefslogtreecommitdiffstats
path: root/otherlibs/num/nat.ml
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>2002-03-14 20:12:54 +0000
committerXavier Leroy <xavier.leroy@inria.fr>2002-03-14 20:12:54 +0000
commite26a033cd0eada3c1df1e7ec14544d2a9d8b3977 (patch)
treeff2e55d5e93cafa73b52463701f83ec64d8534cf /otherlibs/num/nat.ml
parent6d62b988934007b4521dcd6845ccf10b23347d2e (diff)
Retour en arriere sur l'exponentiation modulaire, pas correcte
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@4532 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'otherlibs/num/nat.ml')
-rw-r--r--otherlibs/num/nat.ml28
1 files changed, 0 insertions, 28 deletions
diff --git a/otherlibs/num/nat.ml b/otherlibs/num/nat.ml
index a8ab0f6a9..02f1b1b7a 100644
--- a/otherlibs/num/nat.ml
+++ b/otherlibs/num/nat.ml
@@ -234,34 +234,6 @@ let sqrt_nat rad off len =
loop ()
end;;
-(* Modular exponentiation. Return a fresh nat equal to (a ^ b) mod c.
- We assume c > 0 and a < c. *)
-
-let mod_power_nat a b c =
- let len_c = length_nat c in
- let res = make_nat len_c in
- set_digit_nat res 0 1;
- let prod = create_nat (2 * len_c) in
- let modmult_res x =
- (* res <- res * x mod c *)
- let len_x = length_nat x in
- set_to_zero_nat prod 0 (2 * len_c);
- ignore(mult_nat prod 0 (len_c + len_x) res 0 len_c x 0 len_x);
- div_nat prod 0 (len_c + len_x) c 0 len_c;
- blit_nat res 0 prod 0 len_c in
- let digit = make_nat 1
- and carry = make_nat 1 in
- (* Iterate over each bit of b, from most significant to least significant *)
- for i = length_nat b - 1 downto 0 do
- blit_nat digit 0 b i 1;
- for i = 1 to length_of_digit do
- modmult_res res; (* res <- res * res *)
- shift_left_nat digit 0 1 carry 0 1;
- if is_digit_odd carry 0 then modmult_res a (* res <- res * a *)
- done
- done;
- res
-
let power_base_max = make_nat 2;;
match length_of_digit with