51 lines
1.0 KiB
OCaml
51 lines
1.0 KiB
OCaml
let rec pow a = function
|
|
| 0 -> 1
|
|
| 1 -> a
|
|
| n ->
|
|
let b = pow a (n / 2) in
|
|
b * b * (if n mod 2 = 0 then 1 else a)
|
|
|
|
let rec powmod a d = function
|
|
| 0 -> 1
|
|
| 1 -> a mod d
|
|
| n ->
|
|
let b = (powmod a d (n / 2)) mod d in
|
|
(((b * b) mod d) * (if n mod 2 = 0 then 1 else a)) mod d
|
|
|
|
let int_and a b =
|
|
match (a>0, b>0) with
|
|
true, true -> 1
|
|
| _, _ -> 0
|
|
|
|
let int_or a b =
|
|
match (a>0, b>0) with
|
|
false, false -> 0
|
|
| _, _ -> 1
|
|
|
|
let int_eq a b =
|
|
if a = b then 1 else 0
|
|
|
|
let int_less a b =
|
|
if a < b then 1 else 0
|
|
|
|
let int_less_eq a b =
|
|
if a <= b then 1 else 0
|
|
|
|
let int_more a b =
|
|
if a > b then 1 else 0
|
|
|
|
let int_more_eq a b =
|
|
if a >= b then 1 else 0
|
|
|
|
let int_not a =
|
|
if a > 0 then 0 else 1
|
|
|
|
let rec fromIntToString (alphabet: string) (x: int) : string =
|
|
let base = String.length alphabet in
|
|
if x < 0 then
|
|
""
|
|
else if x < base then
|
|
String.get alphabet x |> String.make 1
|
|
else
|
|
(fromIntToString (alphabet) (x/base - 1)) ^ (String.get alphabet (x mod base) |> String.make 1)
|