On the multiplicative inverse (Extended Euclid)

Contextual introduction
is well known that there is a magic function called gcd, Chinese called the greatest common divisor
algorithm is extremely simple

int gcd(int a,int b){
    if(!b)return a;
    return gcd(b,a%b);
}

This approach is often referred to compute gcd removed divided, however, his scientific name is called "Euclidean algorithm"

However, the mathematician Euclid may just want to torture people with a gcd

So, he developed something called exgcd, scientific name "extended Euclidean"

Example: Luo Gu P1082 congruence equation

The equation for seeking the smallest integer x, a * x mod b = 1 Solution

Is transformed

We observed that the subject of this equation, his essence is to seek ax + by = 1 this equation is the smallest integer solution

Where y is an integer from our newly introduced, and my son seems to be a negative number. It said this is to use Extended Euclidean Algorithm. We will strive to find a set of x, y to satisfy this equation.

See here, it may be in doubt: the extended Euclidean is used to find the ax + by = gcd (a, b) unknowns, how involved is equal to 1 it?

The principle is the equation ax + by = max + by = m solvability is essential m mod gcd (a, b) = 0.

Defined by the greatest common factor, it is a known multiple of GCD (a, b), and b is a multiple of GCD (a, b), and

If x, y are integers, it is determined that the ax + by a multiple of gcd (a, b), and

Since m = ax + by, it must be a multiple m gcd (a, b), and

Then m mod gcd (a, b) = 0

This question can be derived in the equation ax + by = solvability is a necessary condition for 1 mod gcd (a, b) = 0. Therefore, gcd (a, b) is equal to only 1 a. This is in fact a, b coprime

Extended Euclid

Extended Euclid, referred to as the expansion of the EU, it is the basis for the foundation to achieve Euclidean algorithm (gcd) on

Code:

# include <cstdio> 
using namespace std;
int a,b,x,y,k;
void exgcd(int a,int b)
{
    if(b==0)
    {
        x=1;
        y=0;
        return;
    }
    exgcd(b,a%b);
    k=x;
    x=y;
    y=k-a/b*y;
    return;
}

What is the final output of it?
X course, but because you want to mod a number
so we have to output x% b
wrong, and then think better of
x there may be negative, so we have to output (x + b)% b

Done

summary

Extended Euclid is a very common inverse element method

Of course, you might have to ask, above you talk so much, and inverse seeking nothing ah

The final output is the inverse ah

Published 18 original articles · won praise 3 · Views 1269

Guess you like

Origin blog.csdn.net/devout_/article/details/89417793