1. 程式人生 > >洛谷Oj-P1082 同餘方程-擴充套件歐幾里得

洛谷Oj-P1082 同餘方程-擴充套件歐幾里得

題目描述:
求關於 x 的同餘方程 ax ≡ 1 (mod b)的最小正整數解。
AC程式碼:

void ex_gcd(int a,int b,int &x,int &y)
{
    if(b == 0)
    {
        x = 1;
        y = 0;
    }
    else
    {
        ex_gcd(b,a % b,y,x);
        y -= (a / b) * x;
    }
    return;
}
int main()
{
    int a,b,x,y;
    cin >> a >> b;
    ex_gcd(a,b,x,y);
    cout
<< (x + b) % b << endl;//防止x為負數,但是為什麼對b取模呢 return 0; }

解決方法:
ax1(modb),b2
ax=by+1
axby=1有解
由裴蜀定理得,gcd(a,b) = 1
axby=gcd(a,b)可以用擴充套件歐幾里得演算法來求解
擴充套件歐幾里得演算法:
ax+by=gcd(a,b)
a=abb+a%b
gcd(a,b)=gcd(b,a%b)
代入①、②
{abb+a%b}x+by=gcd(b,a%b)
abbx+(a%b)x+by=gcd(b,a%b)
b{

abx+y}+(a%b)x=gcd(b,a%b)

x=abx+y
y=x
a=b
b=a%b
數論這一部分還是不太懂……