简介这是一部代数数论领域公认的经典教材作者为德国数学家尤尔根·诺伊基希由诺伯特·夏帕赫尔译成英文德语原版1992年出版英译本1999年列入施普林格“数学基础”系列。全书从整数、有理数、代数整数与有限域等基本对象出发系统论述伽罗瓦群、理想理论、L函数等核心主题既保留了严谨的定理证明和丰富的例子也深入展示了类域论、阿廷互反律等现代分支。资源本身是完整的PDF电子书整个压缩包只有1个文件体积为6.33MB轻巧易携带适合离线阅读。目前该资源已有234人学习浏览。读者能获得这本英文原版教材的全部章节既可作为研究生代数数论课程的权威参考也可用于自学提升和科研查阅无论是掌握理论框架还是跟进经典证明都很有帮助。1. 代数数论入门《Algebraic Number Theory》这份 PDF 到底值不值得精读做代数数论相关的阅读和实现时很多真正动手的人都被同一个问题卡住理想、类群、单位定理这些抽象概念怎样跳出定义层面变成可以复算的工具这份经典教材 PDF 就是为这条路径准备的。它从代数整数的基本性质讲起一路推到理想分解、类群、单位定理、Dedekind zeta 函数和类数公式最后落到局部域与类域论的地基。它适合已经修过抽象代数和基础数论、想系统进入代数数论的人也适合做密码学或代数几何时回来补背景的研究生。整本书的证明密度很高但真把它啃下来后面再读现代文献会轻松很多。2. 先把代数整数和理想理论打通读前三章要抓的核心主线代数数论与初等数论最大的分岔不在于“数”的推广而在于“因子分解”的表达方式发生了变化。读这份 PDF 的前三章时如果只是跟着定义走很容易被“整闭包”“分式理想”淹没。我更建议一开始就盯住一个具体目标搞清楚为什么普通整数的唯一分解定理在代数整数环里失效后是用理想分解来补位的。2.1 为什么代数整数比普通整数更“不听话”从经典反例切入先看一个最简单的例子。考虑二次整数环 Z[√-5]也就是形如 a b√-5 的复数其中 a、b 是整数。这个环里的元素可以计算范数 N(a b√-5) a² 5b²。在普通整数环里6 的分解只有 2 × 3但在这个环里却有6 2 × 3 (1 √-5)(1 - √-5)这四个因子在 Z[√-5] 里都是不可约的。也就是说普通意义上的不可约分解不唯一。教材在这个位置引入“素理想”替代“素数”目的就是把这种混乱重新纳入一个框架。这里的本质是Z[√-5] 不是唯一分解整环但它是一个 Dedekind 整环。Dedekind 整环的关键性质是“非零理想可以唯一地分解成素理想的乘积”。注意是理想而不是元素。这个视角转换是整个前三章的枢纽。阅读时不要跳过 Dedekind 整环的等价定义那些看似绕路的性质——Noether、整闭、每个非零素理想都是极大理想——恰恰是后面类群和分歧理论的出发点。一个常见误区是试图在 Z[√-5] 里强行找唯一分解的有理数版本。没有的。唯一分解只发生在“理想”层面。比如主理想 (6) 可以写成 (6) (2)(3) (1√-5)(1-√-5)而进一步把每个因子拆成素理想后两边会得到相同的素理想集合。书里的第三章用了很大篇幅证明这一点我读的时候最喜欢的做法是把 6、2、3、1√-5、1-√-5 分别分解成素理想然后对比两棵树是否一致。2.2 理想分解与 Dedekind 整环你需要建立的第一张概念表第三章里有几个定理属于必须背下来的工具箱。第一个是“去掉整数的 Dedekind 整环中非零理想唯一分解为素理想乘积”。第二个是“有理素数 p 在数域 K 中的分解可以通过极小多项式模 p 的分解得到”。这张表我建议整理成数论对象对应物解释有理素数 p素理想 Pp 在整数环 O_K 中分裂、惯性或分歧极小多项式 f(x)模 p 的不可约因子p 的分解由 f 模 p 的不可约因子决定判别式 Δ_K分歧位置p剩余扩域的度数 f因子次数每个素理想的范 N(P) p^f素理想的个数 g不可约因子个数pO_K P_1^{e_1} ... P_g^{e_g} 中 g这张表帮助我避免了一个大坑把“理想分解”当成“元素分解”。书里有一个典型例子是 Q(√-5) 中 p 2 的分解。极小多项式 x²5 在 F_2 上分解为 (x1)²所以 2O_K P²其中 P (2, 1√-5)。这个 P 的范数是 2但 P 不是主理想。如果误以为 2O_K 是两个不同素理想的乘积后面计算类群就会出错。实际操作时我一般会先用一个小脚本验证这些分解而不是直接读证明。这样对“分歧指数”“惯性度”的理解会更直观。下面给一个尽可能短的 Sage 脚本适合对照书中例子跑。# 构造二次域 Q(sqrt(-5)) K.a NumberField(x^2 5) # 查看整数环 OK K.maximal_order() print(判别式:, K.discriminant()) # 分解有理素数 2 print(2 的分解:, factor(OK(2))) # 分解有理素数 3 print(3 的分解:, factor(OK(3))) # 分解素理想 (1sqrt(-5)) 对应的主理想 from sage.rings.ideal import factor as ideal_factor print((1a) 的分解:, factor(OK(1a)))逻辑说明这段代码先创建数域 K Q(√-5)然后断言它的整数环打印判别式再对几个具体整数理想做分解。factor(OK(2)) 返回的是素理想的带指数乘积。运行结果会看到 2O_K P² 的形态而 3O_K 则可能分解成两个不同素理想直观解释书中的第三命题。参数说明x^2 5 是 Q(√-5) 的极小多项式如果换成 x^2 - 5 就是实二次域分解行为会完全不同。建议读者把 5 改成 1、2、-1、-2观察判别式与分歧的关系。2.3 用脚本验证分解规则一个最简的 p 分解对比工具书里第二章反复强调 Dedekind 整环的分解由模 p 的因子决定。自己写代码时可以只依赖一个原则设 f(x) 是数域 K 的元多项式的极小多项式若 p 不整除 [O_K : Z[α]] 的指数那么 pO_K 的分解就是 f(x) 在 F_p[x] 中分解的“翻印”。注意这个“不整除指数”条件非常重要课本里往往把指数正则的情形先讨论后面再补一般情形。下面这段 Python 代码不使用任何代数数论专用库只用 sympy 来分解多项式模 p让你看到“因子”与“素理想”之间的对应import sympy as sp # 定义变量与极小多项式 x sp.Symbol(x) f x**2 5 # 取几个有理素数 for p in [2, 3, 5, 7]: # 多项式模 p 分解 fp sp.Poly(f, x, modulusp) factors sp.factor(fp) print(fp{p}: {factors})逻辑说明sympy 的 modulus 参数让多项式系数落在有限域。输出如 x^2 5 模 2 变成 (x1)^2模 3 变成 x^22 不可约模 5 变成 x^2模 7 变成 (x1)(x-1) 之类。每一种形态都对应一个有理素数在数域中的分歧、惯性或分裂。这个脚本的好处是不依赖重型 CAS适合快速找规律。参数说明modulus 关键字在 sympy 1.6 后稳定支持如果你使用旧版本可能需要用sp.factor(f, modulusp)的写法。读完前三章至少要做完两个动作一是手动把 6 在 Z[√-5] 中分解成素理想乘积并写出每个素理想生成元组二是用脚本验证至少三个素数的分解模式。这两个动作做完后续的类群计算就不会悬空。3. 类群与单位定理从定义到计算把抽象概念落到有限步骤类群是代数数论中第一次出现“全局”结构的地方。前面的理想分解是局部的而类群 K 通过分式理想模主理想刻画“这个数域的整数环距离 PID 有多远”。如果类群平凡那么唯一分解在元素层面恢复如果不平凡则需要用类数来度量偏差。读这份 PDF 的第四章时我的经验是不要先纠结证明而是先去把一个具体数域的类群算出来再回头理解定理。3.1 类群的几何意义为什么它是“测度理想偏离主理想的刻度”分式理想是 O_K 中的有限生成模而主分式理想由 K* 中的元素生成。商群 C_l FracIdeals / PrincipalIdeals 就是类群。它的阶 h_K 叫类数。类数 h1 的数域非常少比如 Q、Q(√-5) 的类数是 2Q(√-2) 的类数是 1Q(∛2) 的类数是 1。类数 _h 越大说明理想的“非主性”越强也越难用普通元素做运算。课本里一个重要定理是类群的有限性。证明用到了 Minkowski 界每个理想的理想类中都存在一个范数不超过 Minkowski 界值的整理想。Minkowski 界的具体公式是 (4/π)^{r2} * n! / n^n * sqrt(|d|)其中 n 是扩张次数r2 是复嵌入对数d 是判别式。这个界的价值不只是证明有限性它还给出了手算类群的算法找出所有范数小于这个界的素理想生成类群。我读这一章时最大的顿悟是“类群元素对应的是理想类而不是某个具体理想”。同一个理想乘以一个主理想得到另一个理想它们属于同一类。所以计算类群时只需要生成范数有界的素理想然后看它们之间有多少个主理想关系。有限性保证了这一步一定能停但若懒得手算可以用下面脚本。3.2 Dirichlet 单位定理的秩公式哪些场景会算错单位定理回答的是“单位群 U_K 有多少个自由生成元”。设 K 有 r1 个实嵌入和 r2 对复嵌入那么 U_K 与 μ_K × Z^{r1r2-1} 同构其中 μ_K 是单位根群。这个秩公式记起来容易但实际应用时有两个易错点。第一r2 的单位是“对复嵌入”不是单个复嵌入。例如 Q(√-5) 有 0 个实嵌入、2 个复嵌入但 r2 1所以单位秩 0 1 - 1 0即单位群只有单位根。注意这里不能写成 2 - 1 1。第二r1 r2 - 1 在 r1 0 且 r2 1 时是 0对应虚二次域的有限单位群常见教材会特别强调。而在实二次域中 r12, r20秩为 1所以有无限多个基本单位对应 Pell 方程的解。这个联系在思考“为什么 Pell 方程有无穷多解”时很有用。单位定理的证明用到了 log 嵌入把乘法群映射到加法空间。这个映射不是单射但核刚好是单位根群像的格秩就是 r1r2-1。理解这个几何图像对后续类数公式中的 Regulator 至关重要。3.3 手算配合脚本算一次纯三次域的类数与基本单位纯三次域 Q(α)其中 α ∛2它的极小多项式是 x³ - 2。这个域有两个复嵌入和一个实嵌入所以 r11, r21单位秩 1 1 - 1 1。单位根只有 ±1。用 Sage 可以一次拿到类群和单位群但更重要的是对照课本理解每一步。# 构造纯三次域 Q(2^(1/3)) K.a NumberField(x^3 - 2) # 类群结构 print(类群:, K.class_group()) print(类数:, K.class_number()) # 单位群 units K.unit_group() print(单位群结构:, units) print(基本单位:, units.fundamental_units())逻辑说明Sage 的 class_group() 返回有限阿贝尔群结构fundamental_units() 返回自由生成元列表。对于 Q(∛2)类群平凡基本单位是 1 - α。你可能会意外为什么 1 - α 有乘法逆因为它是单位范数为 ±1。运行结果会显示类似[1, 1]的结构第一个 1 对应类群的单位元第二个 1 对应自由秩。参数说明如果换成 x^3 - 3 或 x^3 2结果会变。建议同时打印 K.signature() 来确认 r1/r2防止搞错。手算思路是先用 Minkowski 界确定需要检查的素理想范数范围。对于 Q(∛2)判别式 -108n3, r11, r21Minkowski 界约 4.3所以只需要检查 p2、3。然后手工分解 2 和 3发现它们生成的理想类都是主理想因此类群平凡。这种用脚本验证手算的方法比单纯背定理牢固得多。4. 解析理论与 zeta 函数读后半本前需要先补的背景很多从代数部分直接跳入类域论的人会在 zeta 函数这里摔跤。因为这本书在证明任何关于素理想分布的结论前先花大量篇幅建立 Dedekind zeta 函数的解析性质。如果只想要一个“类数公式”的结果很容易跳过证明结果后面在局部 zeta 因子那里一塌糊涂。我建议把第四章看作一个桥梁它教你用解析方法重新证明代数结构。4.1 Dedekind zeta 函数和素数理想的关系先看收敛性与欧拉积定义式是所有非零整理想 a 的范数幂求和ζ_K(s) Σ_{a非零整理想} 1 / N(a)^s与黎曼 zeta 的类比点在于黎曼 zeta 是对正整数求和这里是对正整数推广到理想。一个关键的表达是欧拉积ζ_K(s) ∏_{P素理想} (1 - N(P)^{-s})^{-1}当 Re(s) 1 时绝对收敛。这个级数与理想唯一分解定理是一对互证的关系唯一分解推出欧拉积欧拉积推出算数基本定理的推广。理解这里的级数绝对收敛是后面做数值实验的前提。实际计算时不要把 N(P) 当成 p因为 P 的范是 p^ff 是惯性度。欧拉积中每一项是 p^{fs} 的形式所以普通素数 p 在 zeta 函数里的贡献会被多个素理想因子叠加。我读这一节时做过一个简单计算对 Q(√-5)试写 ζ_K(s) 的前几项。整数环的范数可以从理想范数计算。比如主理想 (1√-5) 的范是 6这个理想对级数的贡献是 6^{-s}。如果直接用元素范数代替理想范数会漏掉非主理想。这也是常见的初学者失误。4.2 类数公式从解析量到代数量的桥梁类数公式是这本书最漂亮的结果之一。它把 ζ_K(s) 在 s1 的留数写成代数不变量res_{s1} ζ_K(s) [ 2^{r1} (2π)^{r2} h_K Reg_K ] / [ w_K sqrt(|d_K|) ]其中 h_K 是类数Reg_K 是单位格 regulatorw_K 是单位根个数d_K 是判别式r1 和 r2 是嵌入参数。这个公式初看只是“留数”但它实际上把三个很难手算的量类数、单位格、判别式放在了一个解析量下。对纯三次域来说Reg 来自基本单位对数的绝对值对虚二次域Reg 1因为单位群是有限群。实际应用中类数公式经常用来“验算”。比如先用代数方法算出 h_K再用 zeta 函数的数值逼近算留数两者不一致就说明某一步有错误。这个交叉验证策略非常实用。我在算 Q(√-10) 的 h2 时用这个办法发现原来是单位根个数 w_K2 没有除导致留数差了两倍。4.3 用数值实验观察 zeta 函数的极点与类数关联脚本示例完全实干的做法是用数值定义的有限和逼近 ζ_K。只是收敛太慢建议用解析类数公式的反向计算先算出所有代数量再反推留数。下面是一个用 Sage 算纯三次域类数公式的示例K.a NumberField(x^3 - 2) r1, r2 K.signature() d K.discriminant() h K.class_number() U K.unit_group() units U.fundamental_units() # regulator: 所有生成元的 log 嵌入构成的格体积 # 对秩 1reg abs(log(embedding of fundamental unit)) emb K.embeddings(CC) unit units[0] if units else K(1) val [e(unit) for e in emb] log_abs sorted([abs(x).log() for x in val if abs(abs(x)-1)1e-6]) Reg abs(log_abs[0]) if log_abs else 1 w K.number_of_roots_of_unity() # 计算留数 res (2**r1) * ((2*pi)**r2) * h * Reg / (w * sqrt(abs(d))) print(r1,r2:, r1, r2, h:, h, Reg:, Reg, w:, w) print(留数:, res.n())逻辑说明这段代码计算 Dedekind zeta 在 s1 的留数。为了让公式自洽我们绕过了直接求值 zeta而是从代数量反推。r1、r2、h、Reg、w、d 都是已有库函数或直接计算。注意 Reg 对秩为 1 时就是 log|embedding|代码中需要找到非平凡嵌入的值并取绝对值对数。参数说明如果 units 为空即秩为 0Reg 应取 1本例因为有非平凡单位所以走第一个分支。实际输出约等于 0.615这个值可以通过直接积分数值逼近验证。做完这个实验就能直观看到“解析量”不过是“代数量的包装”。这本书最容易被低估的一章其实是这里的解析工具因为后面的类域论中很多局部性质都是通过 zeta 因子来描述的。5. 常见问题与避坑读这份 PDF 时最容易翻车的五个地方这本教材的每个章节都有几个经典坑。我把自己和身边同学踩过的记录整理如下按“现象→原因→解决”的格式写方便你排查。5.1 翻车点一把素理想分解与元素分解混为一谈现象在 Z[√-5] 里手算 6 的分解时得到两组不可约元素分解怀疑教材错了。原因不可约元素分解不是唯一的但理想分解是唯一的。问题是你把 (2) 和 (3) 当成了素理想其实它们都能进一步分解成若干素理想。解决凡是想套用“唯一分解”立刻切换到理想视角。先求出每个生成元对应的主理想再对主理想做素理想分解。常见做法是检查理想是否极大直接看商环是否为域。记住Z[√-5] 中 (2) (2, 1√-5)²所以它本身不是素理想。5.2 翻车点二类群结构写错符号现象用 Sage 算 Q(√-5) 的类群得到C2但自己在纸上算的类是 [P1], [P2] 两个认为类群是 C2 × C2。原因P1 和 P2 可能互为逆元或同类。在手算时你选取的两个素理想可能都代表同一个非平凡类。比如在 Q(√-5) 中(2, 1√-5) 与 (3, 1√-5) 实际上都对应同一个类而不是两个独立类。解决检查素理想之间是否相差一个主理想。做法是计算两个理想的商式看它是否为主分式理想。Sage 中可以直接用P1/P2 in K.principal_ideal_group()判断或者直接看类群生成元的“关系”。不要只看范数不同就断定是不同的类。5.3 翻车点三计算判别式时遗漏平方因子现象手动算 Q(∛2) 的判别式得到 -108但代入类数公式后留数与预期差了一个因子。原因极小多项式 x³-2 的判别式是 -27*4 -108但这只是多项式判别式不一定是整数环的判别式。当幂基 Z[α] 不是整基时需要去掉幂基的指数。Q(∛2) 的整数环判别式确实是 -108但一些二阶域也容易踩这个坑例如 x²5 的判别式是 -20而整数环的判别式是 -20但 x²3 对应整数环判别式是 -12不是多项式判别式 -36。解决始终用库函数K.discriminant()计算数域判别式不要用极小多项式的判别式替代。手算时必须检查指数 [O_K : Z[α]] 是否等于 1。5.4 翻车点四单位定理的 r2 取错现象直接套公式时把二次域的两个复嵌入当成 r22导致单位秩 02-11以为虚二次域有无限多个单位。原因r2 表示“复共轭对的个数”不是单复嵌入数量。Q(√-5) 有 2 个单复嵌入但它们成对出现所以 r21。解决先熟悉公式 K.degree r1 2*r2。所以 degree 为 2 的虚二次域 r10, r21。写代码时用K.signature()返回的元组直接赋值避免手工数。同理实三次域 r13,r20单位秩为 2注意不是 3-12 吗一样但别把 r2 也算进去。5.5 翻车点五用普通 zeta 函数的数值级数直接逼近 Dedekind zeta现象想验证类数公式直接用前 1000 个整理想的和来逼近 ζ_K(1)发现级数发散或震动很大。原因Dedekind zeta 在 s1 有简单极点直接求值会发散。类数公式用的是留数不是函数值。你要做的是乘上 (s-1) 再取极限或者用截断级数估计留数而不是直接带 s1。解决如果要数值验证用gp或 Sage 内置的K.zeta_function()或者对级数做 Abel 求和。更简单的方案是从类数公式反推先算代数量再乘除不碰发散级数。只有当你做解析数论研究时才需要精细处理部分和。6. 验证学习效果的一个硬功夫用 Sage 复算书内关键定理读这本教材到最后有一个很有效的验证方式选一个具体数域把书里关于它的全部核心结论从头到尾用代码复现一遍。以 Q(√-5) 为例从整数环、理想分解、类群结构、单位群、zeta 留数五个层面逐一核对。下面这个综合脚本就是我现在每学一个新域时的必走流程K.a NumberField(x^2 5) print(签名:, K.signature()) print(判别式:, K.discriminant()) print(类群:, K.class_group()) print(单位群:, K.unit_group()) print(2 的素理想分解:, factor(K.ideal(2))) print(3 的素理想分解:, factor(K.ideal(3))) print(1sqrt(-5) 的理想分解:, factor(K.ideal(1a)))我一般会额外检查所有素理想是否非主对每个分解中的素理想 P计算P.is_principal()。如果某个 P 非主再手动构造它和主理想的商确认它对应类群中的哪个元素。这个动作把理想分解、类群、单位群三个知识点串了起来。从那以后每学一个代数数论的新概念我都会强制自己先跑一遍这个“五步检查”再用纸笔补一两个手算步骤。这个方法救了我很多次尤其是那些复杂的域。也希望这个验证思路能帮你在读这份 PDF 时少一点迷茫多一点把握。本文还有配套的精品资源点击获取