Added new main test program (primality test)
This commit is contained in:
70
bin/main.ml
70
bin/main.ml
@ -150,3 +150,73 @@ let program =
|
|||||||
|
|
||||||
Printf.printf "%d\n" (reduce 48 program)
|
Printf.printf "%d\n" (reduce 48 program)
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
(* -------------------------------------------------------------------------- *)
|
||||||
|
(* Miller-Rabin primality test program *)
|
||||||
|
let program =
|
||||||
|
Main
|
||||||
|
("n",
|
||||||
|
"result",
|
||||||
|
Sequence (
|
||||||
|
(Assignment ("result", Integer 0)),
|
||||||
|
(Sequence (
|
||||||
|
(Sequence (
|
||||||
|
(Assignment ("s", Integer 0)),
|
||||||
|
(While (
|
||||||
|
(BCmp (Integer 0,
|
||||||
|
Modulo (
|
||||||
|
Division (
|
||||||
|
(Minus (Variable "n", Integer 1)),
|
||||||
|
(Power (Integer 2, Variable "s"))),
|
||||||
|
(Integer 2)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
(Assignment ("s", Plus (Variable "s", Integer 1)))
|
||||||
|
))
|
||||||
|
)),
|
||||||
|
(Sequence (
|
||||||
|
(Assignment ("d", Division (Minus (Variable "n", Integer 1), Power (Integer 2, Variable "s")))),
|
||||||
|
(For (
|
||||||
|
(Assignment ("i", Integer 20)),
|
||||||
|
(BCmpGreater (Variable "i", Integer 0)),
|
||||||
|
(Assignment ("i", Minus (Variable "i", Integer 1))),
|
||||||
|
(Sequence (
|
||||||
|
Sequence (
|
||||||
|
(Assignment ("a", Plus (Rand (Minus (Variable "n", Integer 4)), Integer 2))),
|
||||||
|
(Assignment ("x", PowerMod (Variable "a", Variable "d", Variable "n")))),
|
||||||
|
Sequence (
|
||||||
|
(For (
|
||||||
|
(Assignment ("j", Integer 0)),
|
||||||
|
(BCmpLess (Variable "j", Variable "s")),
|
||||||
|
(Assignment ("j", Plus (Variable "j", Integer 1))),
|
||||||
|
(Sequence (
|
||||||
|
Sequence (
|
||||||
|
(Assignment ("y", PowerMod (Variable "x", Integer 2, Variable "n"))),
|
||||||
|
(If (
|
||||||
|
(BAnd (BAnd (BCmp (Variable "y", Integer 1), BNot (BCmp (Variable "x", Integer 1))), BNot (BCmp (Variable "x", Minus (Variable "n", Integer 1))))),
|
||||||
|
(Assignment ("result", Integer 1)),
|
||||||
|
(Skip)
|
||||||
|
))),
|
||||||
|
(Assignment ("x", Variable "y"))
|
||||||
|
))
|
||||||
|
)),
|
||||||
|
(If (
|
||||||
|
(BNot (BCmp (Variable "y", Integer 1))),
|
||||||
|
(Assignment ("result", Integer 1)),
|
||||||
|
(Skip)
|
||||||
|
)))
|
||||||
|
))
|
||||||
|
))
|
||||||
|
))
|
||||||
|
))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
;;
|
||||||
|
|
||||||
|
(* should return 0 because prime *)
|
||||||
|
Printf.printf "%d\n" (reduce 179424673 program)
|
||||||
|
;;
|
||||||
|
(* sould return 1 because not prime *)
|
||||||
|
Printf.printf "%d\n" (reduce 179424675 program)
|
||||||
|
;;
|
||||||
|
|||||||
Reference in New Issue
Block a user