同一个325,四种不同的问题
这一单元依次学习高斯整数精确算术理路高斯整数的精确算术Gaussian integers · 高斯整数 · Gaussian integer arithmetic把整数格点看成可整除的复数,用范数下降计算GCD与Bézout系数,并以显式核验完成高斯商环中的约简和求逆。、两平方和判定理路两平方和定理Sum of two squares theorem · Fermat–Euler two-square theorem · 两平方和判定以3模4素因子的指数奇偶性判定正整数是否为两平方和,并用高斯GCD证明1模4素数的表示与素因子分裂。、表示计数理路两平方和的表示计数与本原性Two-square representation count · Jacobi two-square formula · 两平方和表示数通过分配共轭高斯素因子的指数计数并枚举两平方和,区分有序带符号、本原和正无序表示,处理坐标轴与对角线的特殊轨道。、Cornacchia构造理路Cornacchia 算法:两平方和构造Cornacchia algorithm · Cornacchia sum-of-two-squares algorithm · Cornacchia 两平方和算法给定−1的模平方根,以截断欧几里得余数链构造本原两平方和,用余数和系数双不变量证明平方根阈值后的结果恰好等于模数。和本原勾股三数组分类理路本原勾股三数组的完整参数化Primitive Pythagorean triples · Euclid parametrization of Pythagorean triples · 本原勾股三数组双向证明本原勾股三数组与互素异奇偶参数的唯一对应,恢复参数、列尽固定斜边的答案,并迁移到圆的有理点。。它们回答的问题分别是怎样计算、是否存在、有多少个、怎样找到,以及怎样保证列表完整。
统一终点不是背出325的几个等式,而是给出足够短的数据,让另一位读者不用相信你的搜索过程也能逐项复算。
任务一:用三条等式认证GCD
在高斯整数中计算 。应交出的证书为
前两个乘法证明它是公因子,第三个线性组合证明所有公因子都整除它。取范数得 。
再检查模 的逆元:
这比只说“求逆程序返回16”多提供了什么?它把逆元结论变成一条任何人都能乘开的原环等式。
任务二:先算数量,再认证列表穷尽
分解 ,得到
分别展开
得到正无序坐标对
每一对的两个坐标非零且不相等,所以符号与交换各产生八个答案,三组共24个,已经达到独立计数给出的总数。最后一组不本原,去掉八个后恰剩16个。
用25和50检验计数口径:25含坐标轴组 ,50含对角线组 ;它们各自只有四个有序带符号答案。若程序把每组都乘八,应让这两个测试明确失败。
任务三:从同余证书构造两组本原表示
核验
对 ,初始余数平方已经小于325,直接得到 。对 ,保留完整链
以及系数 。最后检查
前式是停止前后保留的余数—系数不变量,后式是输出证书。不要省去第一条输入同余:给一个任意整数57附近的值,Euclidean算法照样会执行,但不再保证平方和等于325。
这次执行没有输出 ,因为算法的输入与输出接口针对本原表示。将它误报成“漏解”与将它误报成“全部表示已找到”,都会混淆问题。
任务四:列尽斜边325的本原三数组
把两对本原参数排列成 ,代入
得到
对两组分别检查正性、平方和与GCD,再用
恢复参数。表示列表的穷尽性加上参数恢复的唯一性,才共同证明这就是全部本原答案。
最后将第二组除以325,得到单位圆上的有理点。由
恢复参数比。解释为什么圆上的 需要单独加入,以及为什么一个有限有理数 不可能代入得到它。
换输入时怎样迁移
将325换成65。无需照搬任何旧坐标:从 重算总数16、本原数16,再求出正无序表示 ,生成斜边65的两组本原三数组 。这给出一份规模更小的独立练习。
再换成45。判定允许两平方和,因为3的指数为二;本原计数却为零,因为所有坐标都被3整除。此时不应寻找 的模45平方根来构造本原表示:模3已经不可能。先把“有表示”和“有本原表示”分开,算法才会收到正确的任务。
下载与核验范围
运行 python foundations-gaussian-norm-certificates.py。脚本不读网络、不安装依赖,也不改写文件;输出JSON。它逐项复核本页算例,并用独立整数枚举交叉检查1到3000的表示计数、本原计数与特殊轨道修正,检验2到2000全部给定模根分支、斜边不超过500的本原三数组和820个精确有理圆点。
有限范围检验能发现实现与算例中的错误,不能替代正文中针对所有输入的证明。相反,正文的一般证明也不能替代程序对输入条件、整数运算和最终证书的实际检查;两类证据在这里各自承担明确工作。