Skip to content

同一个325,四种不同的问题 ​

这一单元依次学习高斯整数精确算术、两平方和判定、表示计数、Cornacchia构造和本原勾股三数组分类。它们回答的问题分别是怎样计算、是否存在、有多少个、怎样找到,以及怎样保证列表完整。

统一终点不是背出325的几个等式,而是给出足够短的数据,让另一位读者不用相信你的搜索过程也能逐项复算。

任务一:用三条等式认证GCD ​

在高斯整数中计算 gcd(29,12+i)。应交出的证书为

δ=5−2i,29=(5+2i)δ,12+i=(2+i)δ,δ=29−2(12+i).

前两个乘法证明它是公因子,第三个线性组合证明所有公因子都整除它。取范数得 29=52+22。

再检查模 δ 的逆元:

16(3+i)−1=δ(7+6i).

这比只说“求逆程序返回16”多提供了什么?它把逆元结论变成一条任何人都能乘开的原环等式。

任务二:先算数量,再认证列表穷尽 ​

分解 325=52⋅13,得到

r2(325)=4(2+1)(1+1)=24,r2prim(325)=4⋅22=16.

分别展开

(2+i)2(3+2i),(2+i)2(3−2i),5(3+2i).

得到正无序坐标对

(1,18),(6,17),(10,15).

每一对的两个坐标非零且不相等,所以符号与交换各产生八个答案,三组共24个,已经达到独立计数给出的总数。最后一组不本原,去掉八个后恰剩16个。

用25和50检验计数口径:25含坐标轴组 (0,5),50含对角线组 (5,5);它们各自只有四个有序带符号答案。若程序把每组都乘八,应让这两个测试明确失败。

任务三:从同余证书构造两组本原表示 ​

核验

182+1=325,572+1=10⋅325.

对 t=18,初始余数平方已经小于325,直接得到 (18,1)。对 t=57,保留完整链

325=5⋅57+40,57=1⋅40+17,

以及系数 0,1,5,6。最后检查

40⋅6+17⋅5=325,172+62=325.

前式是停止前后保留的余数—系数不变量,后式是输出证书。不要省去第一条输入同余:给一个任意整数57附近的值,Euclidean算法照样会执行,但不再保证平方和等于325。

这次执行没有输出 (10,15),因为算法的输入与输出接口针对本原表示。将它误报成“漏解”与将它误报成“全部表示已找到”,都会混淆问题。

任务四:列尽斜边325的本原三数组 ​

把两对本原参数排列成 (18,1),(17,6),代入

(a,b,c)=(m2−n2,2mn,m2+n2),

得到

(323,36,325),(253,204,325).

对两组分别检查正性、平方和与GCD,再用

m2=(c+a)/2,n2=(c−a)/2

恢复参数。表示列表的穷尽性加上参数恢复的唯一性,才共同证明这就是全部本原答案。

最后将第二组除以325,得到单位圆上的有理点。由

t=204/3251+253/325=617

恢复参数比。解释为什么圆上的 (−1,0) 需要单独加入,以及为什么一个有限有理数 t 不可能代入得到它。

换输入时怎样迁移 ​

将325换成65。无需照搬任何旧坐标:从 65=5⋅13 重算总数16、本原数16,再求出正无序表示 (1,8),(4,7),生成斜边65的两组本原三数组 (63,16,65),(33,56,65)。这给出一份规模更小的独立练习。

再换成45。判定允许两平方和,因为3的指数为二;本原计数却为零,因为所有坐标都被3整除。此时不应寻找 −1 的模45平方根来构造本原表示:模3已经不可能。先把“有表示”和“有本原表示”分开,算法才会收到正确的任务。

下载与核验范围 ​

运行 python foundations-gaussian-norm-certificates.py。脚本不读网络、不安装依赖,也不改写文件;输出JSON。它逐项复核本页算例,并用独立整数枚举交叉检查1到3000的表示计数、本原计数与特殊轨道修正,检验2到2000全部给定模根分支、斜边不超过500的本原三数组和820个精确有理圆点。

有限范围检验能发现实现与算例中的错误,不能替代正文中针对所有输入的证明。相反,正文的一般证明也不能替代程序对输入条件、整数运算和最终证书的实际检查;两类证据在这里各自承担明确工作。