不定方程(Diophantine Equation,丢番图方程)是只求 整数解(有时是正整数解)的方程。它通常变量个数多于方程个数,约束不足以「定」住唯一解,所以叫「不定」——但加上「必须是整数」这条苛刻条件后,解的结构反而变得极其丰富。
不定方程和连续情形的反差,是它最迷人的地方。同样是 x2+y2=z2,在实数里画出来是一个圆锥面、解多得没法数;可一旦要求整数,解就稀疏而规整,全由一个 参数公式 生成。再比如 xn+yn=zn,n=2 时整数解无穷多,n≥3 时却 一个非平凡解都没有(费马大定理,Wiles 1995)。难度的跳变只在指数上,系数几乎无关紧要。
ax+by=c(a,b,c∈Z, a,b 不全为 0)
有解条件:gcd(a,b)∣c。这正是裴蜀定理(参见 整除与素数)——ax+by 取遍的恰好是 gcd(a,b) 的所有倍数,所以 c 必须是这个 gcd 的倍数才可能凑出来。
设 (x0,y0) 是一个特解,d=gcd(a,b),则全部整数解为:
⎩⎨⎧x=x0+dbty=y0−dat,t∈Z
为什么是这个形式?两个解相减得 a(x−x0)+b(y−y0)=0,即 da(x−x0)=−db(y−y0)。由于 da,db 互素,必有 db∣(x−x0),写成 x−x0=dbt 便逼出上式。直觉上,所有解在数轴格点上 等间距排成一列,步长 (db,−da) 是让方程不变的「最小整数平移」。
先用扩展欧几里得算法求 ax+by=gcd(a,b) 的一组 (x′,y′),再把两边同乘 c/d:
x0=dcx′,y0=dcy′
它与 一次同余方程 ax≡c(modb) 是同一个问题的两种写法。
例:求 7x+5y=100 的 全部正整数解。
第一步,判可解。gcd(7,5)=1∣100,有解。
第二步,求特解。5≡5, 7≡2(mod5),先解 7x≡100(mod5) 即 2x≡0(mod5),得 x≡0(mod5)。取 x0=0 则 y0=20,得一组特解 (0,20)(也可肉眼凑:x=5,y=13)。
第三步,写通解。d=1,db=5, da=7:
x=0+5t,y=20−7t,t∈Z
第四步,加正整数约束 x>0 且 y>0:
x=5t>0⇒t≥1,y=20−7t>0⇒t≤720<3⇒t≤2
故 t∈{1,2},得两组正整数解:
t=1:(x,y)=(5,13),t=2:(x,y)=(10,6)
验算 7×5+5×13=35+65=100、7×10+5×6=70+30=100,均成立。这类「鸡兔同笼 / 凑硬币」的题,套路就是 特解 → 通解 → 用正性把 t 框成一段整数区间。
a1x1+a2x2+⋯+anxn=c
有解条件:gcd(a1,a2,…,an)∣c。求解可以 逐步合并:先把 a1x1+a2x2 看成一个新变量 g2t2(其中 g2=gcd(a1,a2)),方程降为 g2t2+a3x3+⋯=c,再处理 g2 与 a3,如此层层归并到二元情形。
满足 x2+y2=z2 的正整数三元组 (x,y,z),又称 毕达哥拉斯三元组(Pythagorean Triple)。
若 gcd(x,y,z)=1(等价地 x,y 互素),称为 本原勾股数。所有本原勾股数都可由两个参数 (m,n) 生成:
x=m2−n2,y=2mn,z=m2+n2
要求 m>n>0、gcd(m,n)=1、且 m,n 一奇一偶。这三条限制保证生成的三元组本原、且不重复。
例:(m,n)=(2,1)⇒(3,4,5);(m,n)=(3,2)⇒(5,12,13);(m,n)=(4,1)⇒(15,8,17)。
例:枚举 m≤4 的全部合法 (m,n),生成本原勾股数表。合法要求 m>n>0、gcd(m,n)=1、m,n 一奇一偶:
| m | n | x=m2−n2 | y=2mn | z=m2+n2 | 三元组 |
|---|
| 2 | 1 | 3 | 4 | 5 | (3,4,5) |
| 3 | 2 | 5 | 12 | 13 | (5,12,13) |
| 4 | 1 | 15 | 8 | 17 | (15,8,17) |
| 4 | 3 | 7 | 24 | 25 | (7,24,25) |
为什么没有 (3,1)?因为 3,1 都是奇数,不满足「一奇一偶」,生成的 (8,6,10)=2×(4,3,5) 不是本原解。约束的作用正是 滤掉非本原与重复。把表里任一行同乘 k,例如 (3,4,5)×2=(6,8,10),就得到一般(非本原)勾股数。
这个参数化背后是单位圆上的有理点。把 x2+y2=z2 除以 z2 得 (zx)2+(zy)2=1,于是找勾股数等价于找单位圆上的有理点。从定点 (−1,0) 引一条有理斜率的直线去截圆,另一个交点必是有理点,斜率参数恰好对应 (m,n) 之比。一条「有理斜率扫一遍」就把所有解一网打尽。
把任一本原勾股数同乘以正整数 k,即得所有勾股数。所以本原解是「种子」,整体是它们的整数倍。
形式:
x2−Dy2=1(D>0, D 不是完全平方数)
这就是 佩尔方程(Pell's Equation)。D 必须非平方,否则左边能因式分解、只有平凡解。
佩尔方程总有无穷多组解,且全部由 一个 最小正整数解 (x1,y1)(称 基本解)生成:
xn+ynD=(x1+y1D)n
把右边按 a+bD 展开,对照系数即得第 n 组解 (xn,yn)。直觉上,x+yD 这种数在乘法下封闭,而「x2−Dy2=1」恰好说这个数的「范数」为 1;范数为 1 的数相乘范数仍为 1,所以基本解的幂次源源不断地产出新解。
例:D=2 的基本解是 (3,2),32−2⋅22=1。但基本解可能大得离谱——D=61 时 x1=1766319049,远超直觉,这也是佩尔方程出名的原因之一。
例:由 D=2 的基本解 (x1,y1)=(3,2) 递推生成多组解。有两种等价做法。
其一,乘幂展开:(xn+yn2)=(3+22)n。算 n=2:
(3+22)2=9+122+8=17+122⇒(x2,y2)=(17,12)
验算 172−2×122=289−288=1,对。
其二,线性递推(更适合手算),由 (xn+1+yn+12)=(xn+yn2)(3+22) 展开对照系数得:
xn+1=3xn+4yn,yn+1=2xn+3yn
从 (3,2) 滚动:
| n | xn | yn | xn2−2yn2 |
|---|
| 1 | 3 | 2 | 1 |
| 2 | 17 | 12 | 1 |
| 3 | 99 | 70 | 1 |
| 4 | 577 | 408 | 1 |
例如 x3=3×17+4×12=99、y3=2×17+3×12=70,且 992−2×702=9801−9800=1。每滚一步范数恒为 1,源源不断产出新解。
无穷递降法(Infinite Descent)是费马留给数论的招牌武器,专门用来证明「某方程 没有 正整数解」。
它的逻辑是这样:假设方程有正整数解,就从中取一个「最小」的解,然后通过代数构造,造出一个 更小 的正整数解。但正整数不可能无限变小(没有无穷下降的正整数链),矛盾。于是「有解」的假设被推翻。
最经典的应用是证明 x4+y4=z2 无正整数解(进而推出 n=4 的费马大定理):从一组解出发,利用勾股数的参数化,能造出一组 z 更小的解,无限递降导致矛盾。这个方法本质上是 最小反例 + 自我繁殖出更小反例 的归谬,思想极简却威力惊人。
反设有解,取 z 最小 的一组正整数解,可设 gcd(x,y)=1(否则约去公因子得更小的 z,与最小矛盾)。把方程看成勾股数 (x2)2+(y2)2=z2,(x2,y2,z) 是本原勾股数,故存在互素、一奇一偶的 m>n>0 使(不妨设 y2 为偶):
x2=m2−n2,y2=2mn,z=m2+n2
由第一式 x2+n2=m2 又是一组本原勾股数(gcd(m,n)=1 保证),再参数化:存在互素的 a>b>0 使
n=2ab,x=a2−b2,m=a2+b2
代回 y2=2mn=2(a2+b2)(2ab)=4ab(a2+b2),即
(2y)2=ab(a2+b2)
而 a,b,a2+b2 两两互素,三个互素的数之积是完全平方,则每个都必是完全平方:
a=p2,b=q2,a2+b2=r2
最后一式给出 p4+q4=r2——又一组同型解!而 r≤r2=a2+b2=m≤m2<m2+n2=z,新解的 r 严格小于原来的 z。这与「z 已是最小」矛盾。于是原方程无正整数解。无穷递降的骨架在此一览无余:由一组解机械地造出 z 更小的同型解,而正整数不能无限下降。
xn+yn=zn(n≥3)
无非平凡整数解(即不存在 xyz=0 的整数解)。这就是 费马大定理(Fermat's Last Theorem)。费马于 1637 年在书页边写下它,声称有「绝妙证明但空白太小写不下」,此后困扰数学界 358 年,直到 1995 年 Andrew Wiles 借助椭圆曲线与模形式理论给出完整证明。
费马大定理至今没有已知的「初等证明」。学到这里只需记住结论,并体会它带来的那句心得:整数方程的难度,往往与系数无关,而与指数有关。 费马本人只对 n=4 用无穷递降法给出了证明,欧拉补上 n=3,剩下的无穷多个指数花了三个世纪才被一举攻克。
Z[i]={a+bi∣a,b∈Z} 称为 高斯整数(Gaussian Integer)。它是一个欧几里得整环,同样有带余除法和唯一分解。把数论搬进复平面后,许多实整数的问题(尤其是平方和)会突然变简单——因为 a2+b2=(a+bi)(a−bi),平方和被「因式分解」了。
正整数 n 能表为两个整数的平方和 ⟺ n 的每个形如 4k+3 的素因子都出现 偶数次。
例:5=12+22 可以;3 不行(3≡3(mod4) 且只出现一次);45=9×5=62+32 可以(3 出现两次)。背后的原因是:4k+1 型素数在高斯整数里能再拆成两个共轭因子,4k+3 型则保持「素」,只有成对出现才拼得回平方和。
拉格朗日四平方和定理(Lagrange's Four-Square Theorem):每个正整数都可以表为四个整数的平方和。 两个平方不够(受 4k+3 限制),但放宽到四个,限制就彻底消失,无一例外。
| 方法 | 适用情形 |
|---|
| 代换 + 整除分析 | 二元低次方程,缩小变量范围 |
| 取模筛除 | 用 (modp) 排除不可能的取值 |
| 因式分解 | 凑成 (x−a)(y−b)=c,再枚举 c 的因子 |
| 不等式夹逼 | 用大小关系把变量框在有限范围内枚举 |
| 无穷递降 | 假设有解构造更小的解,导出矛盾 |
| 韦达跳跃 | 视作一元二次,用根与系数关系换出新解 |
「取模筛除」是性价比最高的第一招:很多方程在某个合适的模下左右两边的取值范围对不上,立刻判定无解。比如 x2≡0,1(mod4),所以 x2+y2 模 4 只能是 0,1,2,永远凑不出 3——这一句话就能毙掉一大批方程。动手解题前,先试几个小模数往往事半功倍。
例(取模筛除):证 x2−3y2=2 无整数解。看模 3:右边 2,左边 x2−3y2≡x2(mod3)。而平方模 3 只能是 0 或 1(02≡0, 12≡1, 22≡1),凑不出 2,故无解。挑模数的诀窍是 让某个变量项消失——这里 3y2 在模 3 下自动归零,只剩 x2 与常数比对。
例(取模筛除):证 x2+y2+z2=2024 之类时先验模 8。平方模 8 只能取 {0,1,4},三个这样的数相加,模 8 落在有限集合内;若右边模 8 不在该集合,立判无解。这是「三平方和」问题的常用第一刀。
例(韦达跳跃,Vieta Jumping):这是把方程视作某个变量的一元二次、用根与系数关系「跳」出新解的技巧。看方程 x2−kxy+y2=1 找正整数解。固定 y,视作关于 x 的二次方程 x2−(ky)x+(y2−1)=0。若 (x,y) 是一组解且 x≥y,由韦达定理另一根 x′=ky−x=xy2−1 也是整数解,且 x′=xy2−1≤yy2−1<y≤x,得到一组更小的解 (y,x′)。以 k=3 为例,从 (x,y)=(2,1)(验 4−6+1=−1,取 x2−3xy+y2=−1 一支)出发,跳出 (5,2),(13,5),(34,13),…——相邻两项满足 xn+1=3xn−xn−1,正是斐波那契的奇数下标项。韦达跳跃既能 向下递降证无解,也能 向上递推生成全部解,看用哪个方向。