From 1f5e6637a1a9cd7f795a08ff0cef02fd0ca182c1 Mon Sep 17 00:00:00 2001 From: EdouardParis <mail@edouard.paris> Date: Wed, 25 May 2016 15:20:42 +0200 Subject: [PATCH] zpzpolynome with p = 701 --- Makefile | 3 ++- main.ml | 34 ++++++++++++++++++++++++++++++++++ zpzpolynome.ml | 18 ++++++++++++++++++ 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 zpzpolynome.ml diff --git a/Makefile b/Makefile index d54bb92..524cf98 100644 --- a/Makefile +++ b/Makefile @@ -2,9 +2,10 @@ all: mkdir bin ocamlc -c polynome.ml ocamlc -c simplepolynome.ml + ocamlc -c zpzpolynome.ml ocamlc -c nums.cma main.ml ocamlc -c nums.cma stats_big_int.ml - ocamlc -o bin/main nums.cma polynome.cmo simplepolynome.cmo main.cmo + ocamlc -o bin/main nums.cma polynome.cmo simplepolynome.cmo zpzpolynome.cmo main.cmo ocamlc -o bin/stats_big_int nums.cma polynome.cmo simplepolynome.cmo stats_big_int.cmo test: diff --git a/main.ml b/main.ml index 295328f..ac53fcc 100644 --- a/main.ml +++ b/main.ml @@ -4,6 +4,7 @@ open Big_int;; open Polynome;; open Simplepolynome;; +open Zpzpolynome;; (*big num avec simple variable*) print_string "**********************************\n"; @@ -42,3 +43,36 @@ print_string "\n"; print_string "diff\n naive_mul - karatsuba = ";; print_string (P.print(P.sub naive karatsuba));; print_string "\n"; + + +module ZpZ = Polynome(ZpZCoeff)(SimpleDegree);; +(*base monomiale pour la construction du polynĂ´me*) +let p1 = P.generate 4;; + +print_string "P1 = "; +print_string (P.print p1); +print_string "\n";; + +let p2 = P.generate 4;; + +print_string "P2 = "; +print_string (P.print p2); +print_string "\n"; + +print_string "addition polynome:\np1 + p2 = "; +print_string (P.print(P.add p1 p2));; +print_string "\n"; + +print_string "naive multiplication:\np1 x p2 = ";; +let naive = P.naive_mul p2 p1;; +print_string (P.print(naive));; +print_string "\n"; + +print_string "karatsuba multiplication:\np1 x p2 = ";; +let karatsuba = (P.karatsuba_mul p1 p2);; +print_string (P.print(karatsuba));; +print_string "\n"; + +print_string "diff\n naive_mul - karatsuba = ";; +print_string (P.print(P.sub naive karatsuba));; +print_string "\n"; diff --git a/zpzpolynome.ml b/zpzpolynome.ml new file mode 100644 index 0000000..1d6fb9c --- /dev/null +++ b/zpzpolynome.ml @@ -0,0 +1,18 @@ +(* projet AP 2016 Edouard Paris*) +(*corps premier Z/pZ avec le nombre premier 701*) +open Big_int;; +open Random;; + +module ZpZCoeff= + struct + type coeff = big_int + let print c = (string_of_big_int c) + let add c1 c2 = mod_big_int (add_big_int c1 c2) (big_int_of_int 701) + let sub c1 c2 = sub_big_int c1 c2 + let equal c1 c2 = eq_big_int c1 c2 + let is_null c = eq_big_int c zero_big_int + let mul c1 c2 = mod_big_int (mult_big_int c1 c2) (big_int_of_int 701) + let minus c = minus_big_int c + let generate i = mod_big_int (big_int_of_int (Random.int (701-i))) (big_int_of_int 701) + end +;; -- GitLab