Agent-almanac explore-diophantine-equations
install
source · Clone the upstream repo
git clone https://github.com/pjt222/agent-almanac
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/pjt222/agent-almanac "$T" && mkdir -p ~/.claude/skills && cp -r "$T/i18n/zh-CN/skills/explore-diophantine-equations" ~/.claude/skills/pjt222-agent-almanac-explore-diophantine-equations-f39f78 && rm -rf "$T"
manifest:
i18n/zh-CN/skills/explore-diophantine-equations/SKILL.mdsource content
探索丢番图方程
系统求解要求整数解的丢番图方程,涵盖线性方程、Pell 方程、勾股方程和高次方程。
适用场景
- 求解线性丢番图方程 ax + by = c 的整数解
- 使用连分数法求解 Pell 方程 x^2 - Dy^2 = 1
- 生成和分析勾股数组 (a, b, c) 满足 a^2 + b^2 = c^2
- 分析高次丢番图方程的可解性
- 将实际问题转化为丢番图方程
输入
- 必需:丢番图方程的陈述
- 可选:解的约束(正整数、非负整数、某范围内)
- 可选:是否需要所有解的参数化或仅特定解
- 可选:应用上下文
步骤
第 1 步:分类方程并判定可解性
确定方程类型和解的存在性:
- 线性丢番图方程 ax + by = c:
- 有解当且仅当 gcd(a, b) | c
- 如果有解,则有无穷多解
- Pell 方程 x^2 - Dy^2 = 1(D 为非完全平方正整数):
- 总是有非平凡解
- 最小正解可通过 sqrt(D) 的连分数展开求得
- 负 Pell 方程 x^2 - Dy^2 = -1:
- 不一定有解——取决于 D 的性质
- 有解当且仅当 sqrt(D) 的连分数周期长度为奇数
- 勾股方程 x^2 + y^2 = z^2:
- 所有本原解(gcd(x,y,z) = 1)由参数化给出
- Fermat 方程 x^n + y^n = z^n(n ≥ 3):
- 无正整数解(Fermat 大定理,Wiles 1995 年证明)
- 一般二次丢番图方程:可使用 Hasse-Minkowski 定理等工具分析。
预期结果: 方程已分类,可解性条件已确定或证明无解。
失败处理: 如果方程不属于标准类型,尝试通过变量替换或模运算论证将其转化为已知类型。模运算是证明无解的强大工具。
第 2 步:求解方程
根据方程类型求解:
- 线性丢番图方程:
- 使用扩展 Euclid 算法找 ax + by = gcd(a,b) 的特解 (x_0, y_0)
- 缩放得到 ax + by = c 的特解:x_0' = x_0 * c/gcd(a,b)
- 通解:x = x_0' + (b/d)t, y = y_0' - (a/d)t,t 为任意整数
- 对于正整数解,求 t 的范围使 x > 0 且 y > 0
- Pell 方程:
- 计算 sqrt(D) 的连分数展开 [a_0; a_1, a_2, ..., a_k, ...]
- 找到周期长度 k
- 如果 k 为偶数,第 k-1 个渐近分数 p_(k-1)/q_(k-1) 给出最小解
- 如果 k 为奇数,第 2k-1 个渐近分数给出最小解
- 所有解由递推生成:(x_(n+1), y_(n+1)) = (x_1 * x_n + D * y_1 * y_n, x_1 * y_n + y_1 * x_n)
- 勾股数组:
- 本原勾股数组参数化:对互素的 m > n > 0(一奇一偶)
- a = m^2 - n^2, b = 2mn, c = m^2 + n^2
- 一般勾股数组为本原数组的倍数
预期结果: 方程的特解和通解(或参数化),正整数解的范围(如有约束)。
失败处理: 如果连分数计算错误,通过代入 x^2 - Dy^2 验证候选解。连分数的每一步都应验证。
第 3 步:验证和分析解
确认解的正确性并进行进一步分析:
- 代入验证:将求得的解代入原方程确认等式成立。
- 完整性检查:
- 对于线性方程,验证通解公式生成的解确实覆盖所有解
- 对于 Pell 方程,验证递推关系正确生成后续解
- 最小解:确认找到的是最小正解(对 Pell 方程尤其重要)。
- 解的性质分析:
- 解的增长率(Pell 方程的解呈指数增长)
- 解的模式和规律
- 应用解释:将数学解翻译回原始问题的语境。
预期结果: 所有解经验证正确,解的结构(通解公式或参数化)已完整描述。
失败处理: 如果验证失败,重新检查计算步骤。对于 Pell 方程,确认 D 不是完全平方数(完全平方数的 Pell 方程无正整数解)。
验证清单
- 方程类型正确分类
- 可解性条件已验证
- 所有解代入原方程验证正确
- 通解公式覆盖所有解
- 正整数解的范围正确计算(如有约束)
- Pell 方程的最小正解正确
- 勾股数组的本原性条件已检查
常见问题
- 混淆 Pell 方程的两种形式:x^2 - Dy^2 = 1 和 x^2 - Dy^2 = -1 是不同的方程,后者不一定有解。
- D 为完全平方数:当 D = k^2 时,x^2 - k^2*y^2 = (x-ky)(x+ky) = 1 只有平凡解 y = 0, x = ±1。
- 忽略线性方程的可解性条件:ax + by = c 仅在 gcd(a,b) | c 时有解。直接使用扩展 Euclid 算法而不检查此条件可能得到非整数"解"。
- 勾股数组参数化的条件:m 和 n 必须互素且一奇一偶,否则生成的不是本原数组。
- 模运算论证的方向:模运算可以证明无解(如果模某个数无解,则整体无解),但不能直接证明有解。
相关技能
-- 丢番图方程的可解性常依赖于素数性质analyze-prime-numbers
-- 模运算是分析丢番图方程的基本工具solve-modular-arithmetic
-- 某些丢番图方程需要理论推导来完全解决derive-theoretical-result