sig
type t = Gmp.z
val zero : Gmp.Z.t
val one : Gmp.Z.t
val minus_one : Gmp.Z.t
external compare : Gmp.Z.t -> Gmp.Z.t -> int = "mlgmp_z_compare"
external compare_int : Gmp.Z.t -> int -> int = "mlgmp_z_compare_int"
external neg : Gmp.Z.t -> Gmp.Z.t = "mlgmp_z_neg"
external abs : Gmp.Z.t -> Gmp.Z.t = "mlgmp_z_abs"
external add : Gmp.Z.t -> Gmp.Z.t -> Gmp.Z.t = "mlgmp_z_add"
external add_int : Gmp.Z.t -> int -> Gmp.Z.t = "mlgmp_z_add_int"
external sub : Gmp.Z.t -> Gmp.Z.t -> Gmp.Z.t = "mlgmp_z_sub"
external sub_int : Gmp.Z.t -> int -> Gmp.Z.t = "mlgmp_z_sub_int"
external mul : Gmp.Z.t -> Gmp.Z.t -> Gmp.Z.t = "mlgmp_z_mul"
external mul_int : Gmp.Z.t -> int -> Gmp.Z.t = "mlgmp_z_mul_int"
external div : Gmp.Z.t -> Gmp.Z.t -> Gmp.Z.t = "mlgmp_z_div"
external fma : Gmp.Z.t -> Gmp.Z.t -> Gmp.Z.t -> Gmp.Z.t = "mlgmp_z_fma"
external pow_int : base:Gmp.Z.t -> exponent:int -> Gmp.Z.t
= "mlgmp_z_pow_int"
external int_pow_int : base:int -> exponent:int -> Gmp.Z.t
= "mlgmp_z_int_pow_int"
external scale : Gmp.Z.t -> base:int -> exponent:int -> Gmp.Z.t
= "mlgmp_z_scale"
external root : nth:int -> Gmp.Z.t -> Gmp.Z.t = "mlgmp_z_root"
external sqrt : Gmp.Z.t -> Gmp.Z.t = "mlgmp_z_sqrt"
external rem : Gmp.Z.t -> Gmp.Z.t -> Gmp.Z.t = "mlgmp_z_rem"
external modulo : Gmp.Z.t -> Gmp.Z.t -> Gmp.Z.t = "mlgmp_z_modulo"
external pow_mod : base:Gmp.Z.t -> exponent:Gmp.Z.t -> Gmp.Z.t -> Gmp.Z.t
= "mlgmp_z_pow_mod"
external tdiv : Gmp.Z.t -> Gmp.Z.t -> Gmp.Z.t * Gmp.Z.t = "mlgmp_z_tdiv"
external tdiv_int : Gmp.Z.t -> int -> Gmp.Z.t * int = "mlgmp_z_tdiv_int"
external cdiv : Gmp.Z.t -> Gmp.Z.t -> Gmp.Z.t * Gmp.Z.t = "mlgmp_z_cdiv"
external cdiv_int : Gmp.Z.t -> int -> Gmp.Z.t * int = "mlgmp_z_cdiv_int"
external fdiv : Gmp.Z.t -> Gmp.Z.t -> Gmp.Z.t * Gmp.Z.t = "mlgmp_z_fdiv"
external fdiv_int : Gmp.Z.t -> int -> Gmp.Z.t * int = "mlgmp_z_fdiv_int"
external tsqrt : Gmp.Z.t -> Gmp.Z.t * Gmp.Z.t = "mlgmp_z_tsqrt"
external is_perfect_power : Gmp.Z.t -> bool = "mlgmp_z_is_perfect_power"
external is_perfect_square : Gmp.Z.t -> bool = "mlgmp_z_is_perfect_square"
external is_probably_prime : Gmp.Z.t -> int -> int
= "mlgmp_z_is_probably_prime"
external next_prime : Gmp.Z.t -> Gmp.Z.t = "mlgmp_z_next_prime"
external gcd : Gmp.Z.t -> Gmp.Z.t -> Gmp.Z.t = "mlgmp_z_gcd"
external gcdext : Gmp.Z.t -> Gmp.Z.t -> Gmp.Z.t * Gmp.Z.t * Gmp.Z.t
= "mlgmp_z_gcdext"
external lcm : Gmp.Z.t -> Gmp.Z.t -> Gmp.Z.t = "mlgmp_z_lcm"
external invert : Gmp.Z.t -> Gmp.Z.t -> Gmp.Z.t option = "mlgmp_z_invert"
external jacobi : Gmp.Z.t -> Gmp.Z.t -> int = "mlgmp_z_jacobi"
val legendre : Gmp.Z.t -> Gmp.Z.t -> int
val kronecker : Gmp.Z.t -> Gmp.Z.t -> int
external remove : Gmp.Z.t -> Gmp.Z.t -> Gmp.Z.t * int = "mlgmp_z_remove"
external fac_int : int -> Gmp.Z.t = "mlgmp_z_fac_int"
external dfac_int : int -> Gmp.Z.t = "mlgmp_z_dfac_int"
external int_mfac_int : step:int -> int -> Gmp.Z.t = "mlgmp_z_int_mfac_int"
external primorial_int : int -> Gmp.Z.t = "mlgmp_z_primorial_int"
external bin_int : Gmp.Z.t -> int -> Gmp.Z.t = "mlgmp_z_bin_int"
external fib_int : int -> Gmp.Z.t = "mlgmp_z_fib_int"
external lucnum_int : int -> Gmp.Z.t = "mlgmp_z_lucnum_int"
external logand : Gmp.Z.t -> Gmp.Z.t -> Gmp.Z.t = "mlgmp_z_logand"
external logand_int : Gmp.Z.t -> int -> Gmp.Z.t = "mlgmp_z_logand_int"
external logor : Gmp.Z.t -> Gmp.Z.t -> Gmp.Z.t = "mlgmp_z_logor"
external logor_int : Gmp.Z.t -> int -> Gmp.Z.t = "mlgmp_z_logor_int"
external logxor : Gmp.Z.t -> Gmp.Z.t -> Gmp.Z.t = "mlgmp_z_logxor"
external logxor_int : Gmp.Z.t -> int -> Gmp.Z.t = "mlgmp_z_logxor_int"
external lognot : Gmp.Z.t -> Gmp.Z.t = "mlgmp_z_lognot"
external shift_left : Gmp.Z.t -> int -> Gmp.Z.t = "mlgmp_z_shift_left"
external shift_right : Gmp.Z.t -> int -> Gmp.Z.t = "mlgmp_z_shift_right"
external population_count : Gmp.Z.t -> int = "mlgmp_z_population_count"
external hamming_distance : Gmp.Z.t -> Gmp.Z.t -> int
= "mlgmp_z_hamming_distance"
external scan0 : Gmp.Z.t -> int -> int = "mlgmp_z_scan0"
external scan1 : Gmp.Z.t -> int -> int = "mlgmp_z_scan1"
external set_bit : Gmp.Z.t -> int -> Gmp.Z.t = "mlgmp_z_set_bit"
external clear_bit : Gmp.Z.t -> int -> Gmp.Z.t = "mlgmp_z_clear_bit"
external test_bit : Gmp.Z.t -> int -> int = "mlgmp_z_test_bit"
external of_based_string : base:int -> string -> Gmp.Z.t
= "mlgmp_z_of_based_string"
val of_string : string -> Gmp.Z.t
external to_based_string : base:int -> Gmp.Z.t -> string
= "mlgmp_based_string_of_z"
val to_string : Gmp.Z.t -> string
external of_int : int -> Gmp.Z.t = "mlgmp_z_of_int"
external to_int : Gmp.Z.t -> int = "mlgmp_int_of_z"
external of_int32 : int32 -> Gmp.Z.t = "mlgmp_z_of_int32"
external to_int32 : int32 -> Gmp.Z.t = "mlgmp_int32_of_z"
external of_int64 : int64 -> Gmp.Z.t = "mlgmp_z_of_int64"
external to_int64 : Gmp.Z.t -> int64 = "mlgmp_int64_of_z"
external of_nativeint : nativeint -> Gmp.Z.t = "mlgmp_z_of_nativeint"
external to_nativeint : nativeint -> Gmp.Z.t = "mlgmp_nativeint_of_z"
external to_float : Gmp.Z.t -> float = "mlgmp_float_of_z"
external export_length : Gmp.Z.t -> int = "mlgmp_z_export_length"
val export : order:Gmp.byte_order -> Gmp.Z.t -> bytes -> int -> int -> unit
val import :
order:Gmp.byte_order -> signed:bool -> bytes -> int -> int -> Gmp.Z.t
end