Click or drag to resize
gmp_libmpz_invert Method
Compute the inverse of op1 modulo op2 and put the result in rop.

Namespace:  Math.Gmp.Native
Assembly:  Math.Gmp.Native (in Math.Gmp.Native.dll) Version: 1.0.0.0 (1.0.0.0)
Syntax
public static int mpz_invert(
	mpz_t rop,
	mpz_t op1,
	mpz_t op2
)

Parameters

rop
Type: Math.Gmp.Nativempz_t
The result integer.
op1
Type: Math.Gmp.Nativempz_t
The first operand integer.
op2
Type: Math.Gmp.Nativempz_t
The second operand integer.

Return Value

Type: Int32
If the inverse exists, the return value is non-zero. If an inverse doesn’t exist the return value is zero.
Remarks

If the inverse exists, the return value is non-zero and rop will satisfy 0 ≤ rop < | op2 | (with rop = 0 possible only when | op2 | = 1, i.e., in the somewhat degenerate zero ring). If an inverse doesn’t exist the return value is zero and rop is undefined. The behaviour of this function is undefined when op2 is zero.

Examples
// Create, initialize, and set the value of op1 to 3.
mpz_t op1 = new mpz_t();
gmp_lib.mpz_init_set_ui(op1, 3U);

// Create, initialize, and set the value of op2 to 11.
mpz_t op2 = new mpz_t();
gmp_lib.mpz_init_set_ui(op2, 11U);

// Create, initialize, and set the value of rop to 0.
mpz_t rop = new mpz_t();
gmp_lib.mpz_init(rop);

// Set rop to the modular inverse of op1 mod op2, i.e. b, where op1 * b mod op1 = 1.
gmp_lib.mpz_invert(rop, op1, op2);

// Assert that rop is 4,
Assert.IsTrue(gmp_lib.mpz_get_si(rop) == 4);

// Release unmanaged memory allocated for rop, op1, and op2.
gmp_lib.mpz_clears(rop, op1, op2, null);
See Also