数论

一.扩展欧几里得算法

1.基本算法

可用于计算ax+by = gcd(a,b)的一组特殊解

基本思路在gcd基础上递归求解

\(ax'+by' = gcd(a,b)\)
转化为

\(bx+(a \mod\ b)y=gcd(a,b)\)
展开得

\(bx+(a-\frac{a}{b}*b)y=gcd(a,b)\)

\(bx+ay-\frac{a}{b}*by=gcd(a,b)\)

\(ay+b(x-\frac{a}{b}*y)=gcd(a,b)\)
可得

\(x' = y ,y' = x-\frac{a}{b}*y\)

long long xt,yt;
void ex_gcd(long long n,long long m){
    if(m==0){
        xt=1;
        yt=0;
    }
    else{
        ex_gcd(m,n%m);
        int yx=xt;
        xt = yt;
        yt = yx-n/m*yt;
    }
    return;
}

2.性质及推广

对于方程\(ax+by=c\)

(1)若\(gcd(a,b)|c\),则方程有整数解,否则无解

(2)若\(ax_0+by_0 = gcd(a,b)\)

则可得到原方程的一组特殊解

\(a*\frac{x_0*c}{gcd(a,b)}+b*\frac{y_0*c}{gcd(a,b)}=c\)

(3) 若\(x_1,y_1\)为原方程的一组特殊解

可得 \(ax_1+by_1=c\)

\(ax_1+abd+by_1-abd=c\)

\(a(x_1+bd)+b(y_1-ad)=c\)

\(记 d的最小值为d_0\)

\(∵ x_1+bd为整数,y_1-ad\)

\(∴ d取d_0的倍数\)

\(易得 d_0 = \frac{1}{gcd(a,b)}\)

\(即最小的ad=\frac{a}{gcd(a,b)}记为d_a,bd = \frac{b}{gcd(a,b)}记为d_b\)

\(则原方程的整数解可表示为a(x1+sd_a)+b(y1-sd_b)=c\)

(3)有关方程的正整数解
需同时满足

\(x1+sd_a>0\)

\(y1-sd_b>0\)

$解得-\frac{x1}{d_a} < s < \frac{y1}{d_b} $

该算法也能应用于求解逆元

\(a\),\(b\)互质时,求\(mod\ b\)\(a\)的逆元

可转化为 \(a\times x + b \times y = 1\)

posted @ 2025-08-17 14:56  S/P/A/  阅读(14)  评论(1)    收藏  举报