数论
一.扩展欧几里得算法
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\)

浙公网安备 33010602011771号