gmp_libmpz_invert Method |
Namespace: Math.Gmp.Native
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.
// 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);