Processing math: 57%
Flint2-0.1.0.5: Haskell bindings for the flint library for number theory
Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.Number.Flint.Fmpz.Mod

Synopsis

Arithmetic modulo integers

Context object

fmpz_mod_ctx_init :: Ptr CFmpzModCtx -> Ptr CFmpz -> IO () Source #

fmpz_mod_ctx_init ctx n

Initialise ctx for arithmetic modulo n, which is expected to be positive.

fmpz_mod_ctx_clear :: Ptr CFmpzModCtx -> IO () Source #

fmpz_mod_ctx_clear ctx

Free any memory used by ctx.

fmpz_mod_ctx_set_modulus :: Ptr CFmpzModCtx -> Ptr CFmpz -> IO () Source #

fmpz_mod_ctx_set_modulus ctx n

Reconfigure ctx for arithmetic modulo n.

Conversions

fmpz_mod_set_fmpz :: Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpzModCtx -> IO () Source #

fmpz_mod_set_fmpz a b ctx

Set a to b after reduction modulo the modulus.

Arithmetic

fmpz_mod_is_canonical :: Ptr CFmpz -> Ptr CFmpzModCtx -> IO CInt Source #

fmpz_mod_is_canonical a ctx

Return 1 if a is in the canonical range [0,n) and 0 otherwise.

fmpz_mod_is_one :: Ptr CFmpz -> Ptr CFmpzModCtx -> IO CInt Source #

fmpz_mod_is_one a ctx

Return 1 if a is 1 modulo n and return 0 otherwise.

fmpz_mod_add :: Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpzModCtx -> IO () Source #

fmpz_mod_add a b c ctx

Set a to b+c modulo n.

fmpz_mod_add_fmpz :: Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpzModCtx -> IO () Source #

fmpz_mod_add_fmpz a b c ctx

Set a to b+c modulo n where only b is assumed to be canonical.

fmpz_mod_sub :: Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpzModCtx -> IO () Source #

fmpz_mod_sub a b c ctx

Set a to bc modulo n.

fmpz_mod_sub_fmpz :: Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpzModCtx -> IO () Source #

fmpz_mod_sub_fmpz a b c ctx

Set a to bc modulo n where only b is assumed to be canonical.

fmpz_mod_fmpz_sub :: Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpzModCtx -> IO () Source #

fmpz_mod_fmpz_sub a b c ctx

Set a to bc modulo n where only c is assumed to be canonical.

fmpz_mod_neg :: Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpzModCtx -> IO () Source #

fmpz_mod_neg a b ctx

Set a to b modulo n.

fmpz_mod_mul :: Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpzModCtx -> IO () Source #

fmpz_mod_mul a b c ctx

Set a to bc modulo n.

fmpz_mod_inv :: Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpzModCtx -> IO () Source #

fmpz_mod_inv a b ctx

Set a to b1 modulo n. This function expects that b is invertible modulo n and throws if this not the case. Invertibility maybe tested with func:fmpz_mod_pow_fmpz or func:fmpz_mod_divides.

fmpz_mod_divides :: Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpzModCtx -> IO CInt Source #

fmpz_mod_divides a b c ctx

If a*c = b \mod n has a solution for a return 1 and set a to such a solution. Otherwise return 0 and leave a undefined.

fmpz_mod_pow_ui :: Ptr CFmpz -> Ptr CFmpz -> CULong -> Ptr CFmpzModCtx -> IO () Source #

fmpz_mod_pow_ui a b e ctx

Set a to b^e modulo n.

fmpz_mod_pow_fmpz :: Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpzModCtx -> IO CInt Source #

fmpz_mod_pow_fmpz a b e ctx

Try to set a to b^e modulo n. If e < 0 and b is not invertible modulo n, the return is 0. Otherwise, the return is 1.

Discrete Logarithms via Pohlig-Hellman

fmpz_mod_discrete_log_pohlig_hellman_init :: Ptr CFmpzModDiscreteLogPohligHellmann -> IO () Source #

fmpz_mod_discrete_log_pohlig_hellman_init L

Initialize L. Upon initialization L is not ready for computation.

fmpz_mod_discrete_log_pohlig_hellman_clear :: Ptr CFmpzModDiscreteLogPohligHellmann -> IO () Source #

fmpz_mod_discrete_log_pohlig_hellman_clear L

Free any space used by L.

fmpz_mod_discrete_log_pohlig_hellman_precompute_prime :: Ptr CFmpzModDiscreteLogPohligHellmann -> Ptr CFmpz -> IO CDouble Source #

fmpz_mod_discrete_log_pohlig_hellman_precompute_prime L p

Configure L for discrete logarithms modulo p to an internally chosen base. It is assumed that p is prime. The return is an estimate on the number of multiplications needed for one run.

fmpz_mod_discrete_log_pohlig_hellman_primitive_root :: Ptr CFmpzModDiscreteLogPohligHellmann -> IO (Ptr CFmpz) Source #

fmpz_mod_discrete_log_pohlig_hellman_primitive_root L

Return the internally stored base.

fmpz_mod_discrete_log_pohlig_hellman_run :: Ptr CFmpz -> Ptr CFmpzModDiscreteLogPohligHellmann -> Ptr CFmpz -> IO () Source #

fmpz_mod_discrete_log_pohlig_hellman_run x L y

Set x to the logarithm of y with respect to the internally stored base. y is expected to be reduced modulo the p. The function is undefined if the logarithm does not exist.

fmpz_next_smooth_prime :: Ptr CFmpz -> Ptr CFmpz -> IO CInt Source #

fmpz_next_smooth_prime a b

Either return 1 and set a to a smooth prime strictly greater than b, or return 0 and set a to 0. The smooth primes returned by this function currently have no prime factor of a-1 greater than 23, but this should not be relied upon.