2025寒假数学

最大公约数

欧几里德算法

结论:\(\operatorname{gcd}(a, b)=\operatorname{gcd}(b, a \bmod b)\)

1.证明 \(\operatorname{gcd}(a, b)\mid\operatorname{gcd}(a\bmod b, b)\)
\(d = \operatorname{gcd}(a, b)\)\(a = md\)\(b = nd\)
\(r = a\bmod b\),则有 \(a = kb + r\),则 \(r = a - kb\)
\(r = md - k(nd) = d(m - nk)\),则 \(d\mid r\)
\(g = \operatorname{gcd}(a\bmod b, b)\),则 \(d\mid g\)
2.证明 \(\operatorname{gcd}(b, a\bmod b)\mid\operatorname{gcd}(a, b)\)
\(r = gt\),则 \(a = kb + r = k(gm) + gt = g(mk + t)\),则 \(g\mid a\),则 \(g\mid d\)
3.得出结论
因为 \(d\mid g\)\(g\mid d\),则 \(d = g\),即 \(\operatorname{gcd}(a, b)=\operatorname{gcd}(b, a \bmod b)\)

代码:

int gcd(int a, int b){//gcd(a, 0) = 0
	return (b == 0 ? a : gcd(b, a % b));
}

时间复杂度:\(O(\log\max(a, b))\)

  • \(a < b\)\(\operatorname{gcd}(a, b) = \operatorname{gcd}(b, a)\)
  • \(a\ge b\)\(\operatorname{gcd}(a, b) = \operatorname{gcd}(b, a\bmod b)\),而至少会让 \(a\) 折半,此种情况出现次数小于等于 \(\log a\)

而第一种情况出现后必会出现第二种情况,而第二种情况出现次数小于等于 \(\log a\),若每次出现第二种情况后都出现第一种情况,则总递归时间复杂度为 \(O(\log\max(a, b))\)

扩展欧几里德算法

概念:常用于求 \(ax + by = \operatorname{gcd}(a, b)\) 的一组可行解。

过程

\(ax_1 + by_1 = \operatorname{gcd}(a, b)\)\(bx_2 + (a\bmod b)y_2 = \operatorname{gcd}(b, a\bmod b)\)
由欧几里德定理可知:\(\operatorname{gcd}(a, b) = \operatorname{gcd}(b, a\bmod b)\)
因为 \(a\bmod b = a - (\lfloor\frac{a}{b}\rfloor\times b)\)
所以 \(ax_1 + by_1 = bx_2 + (a - (\lfloor\frac{a}{b}\rfloor\times b))y_2\)
\(ax_1 + by_1 = ay_2 + b(x_2 - \lfloor\frac{a}{b}\rfloor y_2)\)
所以 \(x_1 = y_2, y_1 = x_2 - \lfloor\frac{a}{b}\rfloor y_2\) 是原方程的一组解。
不断代入递归求解,当 \(b = 0\) 时,将 \(x = 1, y = 0\) 回溯求解。

代码:

int exgcd(int a, int b, int &x, int &y){
	if (!b){//递归边界
		x = 1, y = 0;
		return a;
	}
	int d = exgcd(b, a % b, x, y), t = x;
	x = y, y = t - (a / b) * y;//回溯求解
	return d;
}

通解

下文默认求整数解。
已知一组解,其他的解也可以求出,因为可以将方程转换为一次函数 \(y = -\frac{a}{b} x + \frac{\operatorname{gcd}(a, b)}{b}\)
考虑这样一个方程的通解 \(ax + by = c\)
\(d = \operatorname{gcd}(a, b)\),若 \(d\nmid c\),则方程无解,因为 \(d\mid a\)\(d\mid b\),所以 \(d\mid (ax + by)\),所以 \(d\mid c\)
\(c = kd\)
则可用扩展欧几里德算法求出 \(ax + by = \operatorname{gcd}(a, b)\) 的一组解,所以 \(x = kx\)\(y = ky\)\(ax + by = c\) 的一组解,同样也可以将其转化为一次函数。
接下来考虑通解。
结论:\(x = x_0 - k\times\frac{b}{\operatorname{gcd}(a, b)}\)\(y = y_0 + k\times\frac{a}{\operatorname{gcd}(a, b)}\)

\(a(x_0 + m) + b(y_0 + n) = c\)\((m, n\in\mathbb{Z})\)
\(am + bn = 0\)\(m = -\frac{bn}{a}\)
\(a = pd\)\(b = qd\),则 \(\operatorname{gcd}(p, q) = 1\)\(m = -\frac{qn}{p}\)
因为 \(m\) 为整数,所以 \(p\mid n\),即 \(n\)\(\frac{a}{d}\) 的倍数,\(m = -\frac{b}{a}\times k\times\frac{a}{d} = -k\times\frac{b}{\operatorname{gcd}(a, b)}\)
同理可得 \(n = k\times\frac{a}{\operatorname{gcd}(a, b)}\)

posted @ 2025-01-14 21:57  bryce_yyds  阅读(7)  评论(0编辑  收藏  举报