← 返回 资料库 › 算术与数论 › 解析数论 算术与数论
筛法 估计一个区间内的整数在去除小质数的倍数后还剩下多少个的技术。
直观 逐个质数筛去其倍数 设想一个从2到100的数字网格。划去除2本身之外的所有2的倍数。再划去除3本身之外的所有3的倍数。再划去除5本身之外的所有5的倍数。对每个存活的数持续这样做,最后未被划掉的正好就是质数。这个古老的过滤过程——"筛"——不仅仅是列出 质数的方法;筛法 把同样的想法变成精确的计数工具,即使逐个列举在计算上完全不可行,也能估计一个区间内有多少整数能在给定过滤下存活。
1..60 1..60 1..60 上的埃拉托斯特尼筛法:拖动 n n n 筛去素数 ≤ n \le n ≤ n 的倍数(红色),留下的绿色格子即为素数。中学 埃拉托斯特尼筛法 定义: 埃拉托斯特尼筛法
要列出所有不超过 N N N 的质数:写下 2 , 3 , … , N 2,3,\ldots,N 2 , 3 , … , N ;反复取最小未标记数 p p p ,宣布其为质数,并将 p p p 的所有倍数(从 p 2 p^2 p 2 开始)标记为合数;当 p 2 > N p^2 > N p 2 > N 时停止。
P ( z ) = ∏ p < z p P(z) = \prod_{p < z} p P ( z ) = p < z ∏ p 为什么在 p 2 > N p^2>N p 2 > N 处停止?任何合数 n ≤ N n\le N n ≤ N 都有一个 ≤ N \le\sqrt N ≤ N 的质因数(否则其最小的两个质因数相乘就会超过 N N N ),因此一旦直到 N \sqrt N N 的所有质数都完成标记,剩下未被标记的数确实没有能暴露它的因数——它必是质数。所有质数 p < z p<z p < z 上的乘积 P ( z ) = ∏ p < z p P(z) = \prod_{p < z} p P ( z ) = ∏ p < z p ,正是筛法所滤除的"小"质数集合;筛法理论称之为筛的水平。
逐步筛选 [2, 30] 应用的过滤器 新标记的合数 剩余未标记的个数 p = 2(从4开始) 4,6,8,...,30(14个) 29 − 14 = 15 p = 3(从9开始) 9,15,21,27(新增4个) 15 − 4 = 11 p = 5(从25开始) 25(新增1个) 11 − 1 = 10 停止:7² = 49 > 30 — 10个质数:2,3,5,7,11,13,17,19,23,29
大学 两个定理:为什么筛法有效,以及如何用它计数 整数 n ≥ 2 n \ge 2 n ≥ 2 是质数当且仅当它不能被任何满足 p ≤ n p \le \sqrt n p ≤ n 的质数整除。
为什么成立? 这个等价关系正是使筛法能够提前停止的原因:一旦直到 N \sqrt N N 的所有质数都划去了它们的倍数,就再没有任何证据能证明剩下的数是合数,因此再检验(或划去)更大质数的倍数被证明是白费功夫。
证明 (⇐ \Leftarrow ⇐ )设 n n n 没有 ≤ n \le\sqrt n ≤ n 的质因数。若 n n n 是合数,记 n = a b n=ab n = ab ,1 < a ≤ b < n 1<a\le b<n 1 < a ≤ b < n 。则 a ≤ n a\le\sqrt n a ≤ n (否则 a > n a>\sqrt n a > n 且 b ≥ a > n b\ge a>\sqrt n b ≥ a > n 将迫使 a b > n ab>n ab > n ,矛盾),而 a a a 的最小质因数 p p p 满足 p ≤ a ≤ n p\le a\le\sqrt n p ≤ a ≤ n ,故 p p p 是 n n n 的一个 ≤ n \le\sqrt n ≤ n 的质因数——与假设矛盾。因此 n n n 不存在这样的分解,故 n n n 是质数。
(⇒ \Rightarrow ⇒ )若 n n n 是质数,其正因数只有 1 1 1 和 n n n ;没有任何质数 p < n p<n p < n 整除它,特别地满足 p ≤ n p\le\sqrt n p ≤ n 的质数也不整除。
两者合起来说明这两个条件等价,这正是筛法中使用的终止判据:处理完直到 N \sqrt N N 的所有质数后,[ 2 , N ] [2,N] [ 2 , N ] 中仍未被标记的每个数都满足右边条件,因而都是质数。
设 A = { 1 , 2 , … , x } A=\{1,2,\ldots,x\} A = { 1 , 2 , … , x } ,P \mathcal P P 为质数 p < z p<z p < z 的集合,则与 P ( z ) = ∏ p < z p P(z)=\prod_{p<z}p P ( z ) = ∏ p < z p 互素的 a ∈ A a \in A a ∈ A 个数为 S ( A , P , z ) = ∑ d ∣ P ( z ) μ ( d ) ⌊ x d ⌋ \displaystyle S(A,\mathcal P,z)=\sum_{d \mid P(z)} \mu(d)\Big\lfloor \dfrac{x}{d} \Big\rfloor S ( A , P , z ) = d ∣ P ( z ) ∑ μ ( d ) ⌊ d x ⌋ (μ \mu μ 为莫比乌斯函数);取 z = x + 1 z=\sqrt x+1 z = x + 1 得 π ( x ) − π ( x ) + 1 = S ( A , P , x ) = ∑ d ∣ P ( x ) μ ( d ) ⌊ x / d ⌋ \pi(x)-\pi(\sqrt{x})+1 = S(A,\mathcal{P},\sqrt{x}) = \sum_{d \mid P(\sqrt{x})} \mu(d)\, \lfloor x/d \rfloor π ( x ) − π ( x ) + 1 = S ( A , P , x ) = ∑ d ∣ P ( x ) μ ( d ) ⌊ x / d ⌋ 。
为什么成立? 这是"划去倍数"这一操作精确的定量版本:它不再在网格上物理标记,而是直接用容斥原理,根据哪些小质数整除它们来计数幸存者。它是所有用于攻克孪生质数与有界间隔的现代筛法(布伦筛、塞尔伯格筛、大筛法、GPY筛法)的鼻祖——归根结底,它们都是更巧妙地控制这个精确公式所产生的误差项的方法。
证明 任意整数 a ∈ A a\in A a ∈ A 与 P ( z ) P(z) P ( z ) 互素当且仅当它不被任何满足 p < z p<z p < z 的质数整除。对每个因子 d ∣ P ( z ) d\mid P(z) d ∣ P ( z ) (这些质数某子集的无平方乘积),A = { 1 , … , x } A=\{1,\ldots,x\} A = { 1 , … , x } 中 d d d 的倍数个数恰为 ⌊ x / d ⌋ \lfloor x/d\rfloor ⌊ x / d ⌋ 。
对事件"p ∣ a p\mid a p ∣ a "(p < z p<z p < z )用容斥原理:被 P \mathcal P P 中至少一个 质数整除的 a ∈ A a\in A a ∈ A 个数为 ∑ p < z ⌊ x / p ⌋ − ∑ p < q ⌊ x / ( p q ) ⌋ + ∑ p < q < r ⌊ x / ( p q r ) ⌋ − ⋯ \sum_{p<z}\lfloor x/p\rfloor - \sum_{p<q}\lfloor x/(pq)\rfloor + \sum_{p<q<r}\lfloor x/(pqr)\rfloor - \cdots ∑ p < z ⌊ x / p ⌋ − ∑ p < q ⌊ x / ( pq )⌋ + ∑ p < q < r ⌊ x / ( pq r )⌋ − ⋯ ,符号随相乘的质数个数交替。每个这样的交替符号恰好就是对应无平方 d ∣ P ( z ) d\mid P(z) d ∣ P ( z ) 的莫比乌斯函数 μ ( d ) \mu(d) μ ( d ) :μ ( 1 ) = 1 \mu(1)=1 μ ( 1 ) = 1 ,d d d 为 k k k 个不同质数之积时 μ ( d ) = ( − 1 ) k \mu(d)=(-1)^k μ ( d ) = ( − 1 ) k 。
因此被 P \mathcal P P 中至少一个质数整除的个数为 − ∑ d ∣ P ( z ) , d > 1 μ ( d ) ⌊ x / d ⌋ -\sum_{d\mid P(z),\,d>1}\mu(d)\lfloor x/d\rfloor − ∑ d ∣ P ( z ) , d > 1 μ ( d ) ⌊ x / d ⌋ 。用 ∣ A ∣ = ⌊ x ⌋ = x |A|=\lfloor x\rfloor=x ∣ A ∣ = ⌊ x ⌋ = x (d = 1 d=1 d = 1 项,μ ( 1 ) ⌊ x / 1 ⌋ = x \mu(1)\lfloor x/1\rfloor=x μ ( 1 ) ⌊ x /1 ⌋ = x )减去它,即得与 P ( z ) P(z) P ( z ) 互素的个数:S ( A , P , z ) = x − ∑ d ∣ P ( z ) , d > 1 μ ( d ) ⌊ x / d ⌋ = ∑ d ∣ P ( z ) μ ( d ) ⌊ x / d ⌋ S(A,\mathcal P,z)=x-\sum_{d\mid P(z),d>1}\mu(d)\lfloor x/d\rfloor=\sum_{d\mid P(z)}\mu(d)\lfloor x/d\rfloor S ( A , P , z ) = x − ∑ d ∣ P ( z ) , d > 1 μ ( d ) ⌊ x / d ⌋ = ∑ d ∣ P ( z ) μ ( d ) ⌊ x / d ⌋ 。
最后,取 z = x + 1 z=\sqrt x+1 z = x + 1 ,使 P \mathcal P P 恰为 ≤ x \le\sqrt x ≤ x 的质数:任何与它们全部互素的 a ∈ [ 2 , x ] a\in[2,x] a ∈ [ 2 , x ] 要么是 1 1 1 ,要么是 > x >\sqrt x > x 的质数(由上面的定理,因为它没有 ≤ x \le\sqrt x ≤ x 的质因数),故 S ( A , P , x + 1 ) = 1 + ( π ( x ) − π ( x ) ) S(A,\mathcal P,\sqrt x+1)=1+\big(\pi(x)-\pi(\sqrt x)\big) S ( A , P , x + 1 ) = 1 + ( π ( x ) − π ( x ) ) ,即得所述恒等式。
π ( x ) − π ( x ) + 1 = S ( A , P , x ) = ∑ d ∣ P ( x ) μ ( d ) ⌊ x / d ⌋ \pi(x)-\pi(\sqrt{x})+1 = S(A,\mathcal{P},\sqrt{x}) = \sum_{d \mid P(\sqrt{x})} \mu(d)\, \lfloor x/d \rfloor π ( x ) − π ( x ) + 1 = S ( A , P , x ) = d ∣ P ( x ) ∑ μ ( d ) ⌊ x / d ⌋ 大学 实际应用与典型例题 筛法同时驱动着实际计算与纯粹数学的深刻突破。在软件中,分段埃拉托斯特尼筛是大规模枚举质数的标准算法,而快速的小质数筛则是在RSA密钥生成中运行昂贵的素性检验(如米勒-拉宾检验)之前通用的第一道过滤——在微秒内筛掉约80%的随机奇数候选。在纯粹数学中,精细化的筛法(布伦筛、塞尔伯格筛、GPY筛、梅纳德-陶筛)则是所有关于质数间隔现代突破背后的引擎。
例题: 用勒让德公式计算30以内的质数个数
取 x = 30 x=30 x = 30 、z = 6 z=6 z = 6 (因 30 ≈ 5.48 \sqrt{30}\approx 5.48 30 ≈ 5.48 ,筛法质数为 2 , 3 , 5 2,3,5 2 , 3 , 5 )应用勒让德公式,从头计算 π ( 30 ) \pi(30) π ( 30 ) 。
解答 这里 P ( 6 ) = 2 ⋅ 3 ⋅ 5 = 30 P(6)=2\cdot3\cdot5=30 P ( 6 ) = 2 ⋅ 3 ⋅ 5 = 30 ,其 2 3 = 8 2^3=8 2 3 = 8 个无平方因子为 1 , 2 , 3 , 5 , 6 , 10 , 15 , 30 1,2,3,5,6,10,15,30 1 , 2 , 3 , 5 , 6 , 10 , 15 , 30 。
逐个计算 μ ( d ) ⌊ 30 / d ⌋ \mu(d)\lfloor30/d\rfloor μ ( d ) ⌊ 30/ d ⌋ :+ ⌊ 30 / 1 ⌋ = 30 +\lfloor30/1\rfloor=30 + ⌊ 30/1 ⌋ = 30 ;− ⌊ 30 / 2 ⌋ − ⌊ 30 / 3 ⌋ − ⌊ 30 / 5 ⌋ = − 15 − 10 − 6 = − 31 -\lfloor30/2\rfloor-\lfloor30/3\rfloor-\lfloor30/5\rfloor=-15-10-6=-31 − ⌊ 30/2 ⌋ − ⌊ 30/3 ⌋ − ⌊ 30/5 ⌋ = − 15 − 10 − 6 = − 31 ;+ ⌊ 30 / 6 ⌋ + ⌊ 30 / 10 ⌋ + ⌊ 30 / 15 ⌋ = + 5 + 3 + 2 = + 10 +\lfloor30/6\rfloor+\lfloor30/10\rfloor+\lfloor30/15\rfloor=+5+3+2=+10 + ⌊ 30/6 ⌋ + ⌊ 30/10 ⌋ + ⌊ 30/15 ⌋ = + 5 + 3 + 2 = + 10 ;− ⌊ 30 / 30 ⌋ = − 1 -\lfloor30/30\rfloor=-1 − ⌊ 30/30 ⌋ = − 1 。
相加得 S ( A , P , 6 ) = 30 − 31 + 10 − 1 = 8 S(A,\mathcal P,6)=30-31+10-1=8 S ( A , P , 6 ) = 30 − 31 + 10 − 1 = 8 。由勒让德恒等式 π ( 30 ) − π ( 30 ) + 1 = 8 \pi(30)-\pi(\sqrt{30})+1=8 π ( 30 ) − π ( 30 ) + 1 = 8 ,且 π ( 30 ) = π ( 5 ) = 3 \pi(\sqrt{30})=\pi(5)=3 π ( 30 ) = π ( 5 ) = 3 (质数 2 , 3 , 5 2,3,5 2 , 3 , 5 ),故 π ( 30 ) = 8 + 3 − 1 = 10 \pi(30)=8+3-1=10 π ( 30 ) = 8 + 3 − 1 = 10 ——与上表所列的 10 10 10 个质数一致。
例题: 小质数预筛在RSA密钥生成中能节省多少工作?
在对随机奇数候选运行昂贵的米勒-拉宾检验之前,RSA库会先检查它是否能被 3 , 5 , 7 , 11 , 13 3,5,7,11,13 3 , 5 , 7 , 11 , 13 整除。有多大比例的随机奇数能通过这5个质数的预筛?
解答 由中国剩余定理,模不同质数 3 , 5 , 7 , 11 , 13 3,5,7,11,13 3 , 5 , 7 , 11 , 13 (以及已固定为奇数的 2 2 2 )的剩余类在一个完整周期 2 ⋅ 3 ⋅ 5 ⋅ 7 ⋅ 11 ⋅ 13 = 30,030 2\cdot3\cdot5\cdot7\cdot11\cdot13=30{,}030 2 ⋅ 3 ⋅ 5 ⋅ 7 ⋅ 11 ⋅ 13 = 30 , 030 上相互独立。
随机奇数不被 p p p 整除的概率为 1 − 1 / p 1-1/p 1 − 1/ p ,因此通过全部五个过滤器的比例为 ( 1 − 1 / 3 ) ( 1 − 1 / 5 ) ( 1 − 1 / 7 ) ( 1 − 1 / 11 ) ( 1 − 1 / 13 ) = 2 3 ⋅ 4 5 ⋅ 6 7 ⋅ 10 11 ⋅ 12 13 = 5760 15015 = 384 1001 ≈ 38.4 % (1-1/3)(1-1/5)(1-1/7)(1-1/11)(1-1/13)=\frac23\cdot\frac45\cdot\frac67\cdot\frac{10}{11}\cdot\frac{12}{13}=\frac{5760}{15015}=\frac{384}{1001}\approx38.4\% ( 1 − 1/3 ) ( 1 − 1/5 ) ( 1 − 1/7 ) ( 1 − 1/11 ) ( 1 − 1/13 ) = 3 2 ⋅ 5 4 ⋅ 7 6 ⋅ 11 10 ⋅ 13 12 = 15015 5760 = 1001 384 ≈ 38.4% 。
因此只需五次微小的余数检查——几个CPU周期——就能在调用昂贵的模幂检验之前筛掉超过 61 % 61\% 61% 的奇合数候选;实际密码库会将这一预筛扩展到前几百个质数,几乎零成本地筛掉约80–90%的合数。
常见错误. 勒让德公式中最大的陷阱是以为把 ⌊x/d⌋ 换成其光滑近似 x/d 就能得到可用的估计:单个取整误差至多为1,看似无害,但满足 d | P(z) 的因子有 2^π(z) 个,当 z = √x 时这个 2^π(√x) 比 x 本身增长得快得多 ——累积误差会彻底淹没主项。这一爆炸正是布伦、塞尔伯格以及现代筛法理论必须被发明出来的全部原因:它们对容斥和进行截断或重新加权,使项数保持足够少从而能控制误差。第二个更深的局限是塞尔伯格的奇偶性障碍 :纯粹的筛法无法把质因数个数为奇数 的数(如质数,1个)与个数为偶数 的数(如半素数,2个)区分开来,这正是仅靠筛法能证明哥德巴赫猜想与孪生质数的陈氏 P + P₂ 定理(1973年),却无法在没有外部输入的情况下完成从 P₂ 到真正质数的最后一步的原因。 历史注记
在欧几里得《几何原本》(约公元前300年)证明质数无穷多之后不久,昔兰尼的埃拉托斯特尼(约公元前240年,亚历山大图书馆馆长)描述了这一筛法算法——由尼科马库斯记录于《算术导论》中——至今仍以他的名字命名。
亚历山大里亚的欧几里得
历史注记
在维戈·布伦(1919年)通过证明孪生质数倒数和收敛开创现代筛法理论、戈德斯通–平茨–耶尔德勒姆(2005年)离有界质数间隔仅一步之遥之后,张益唐(2013年)无条件证明了存在无穷多对相邻质数之差不超过70,000,000;几个月内,詹姆斯·梅纳德(以及独立工作的陶哲轩)引入多维塞尔伯格筛,将上界降至600(经Polymath8降至246),并证明了任意长度的k元组质数都存在有界间隔。
张益唐 詹姆斯·梅纳德
研究前沿 截至 2026 年
相邻质数小间隔的无条件纪录保持在 lim inf n ( p n + 1 − p n ) ≤ 246 \liminf_{n} (p_{n+1}-p_n) \le 246 lim inf n ( p n + 1 − p n ) ≤ 246 (梅纳德 + Polymath8b,2014年),直到2026年仍未改变。即便假设广义埃利奥特–哈尔伯斯坦猜想——关于质数在等差数列中分布均匀性的最强合理猜想——同一套筛法工具也只能把上界压到 6 6 6 ,在不突破塞尔伯格奇偶性障碍的前提下绝无可能越过 6 6 6 达到孪生质数的目标 2 2 2 。把差距从 246 246 246 (或 6 6 6 )缩小到 2 2 2 ——孪生质数猜想——以及把类似的差距从陈景润的 p + P 2 p+P_2 p + P 2 缩小到 p + q p+q p + q ——二元哥德巴赫猜想——都需要超越纯粹筛法权重的真正破除奇偶性的新要素;寻找这一要素是当今解析数论的核心未解难题之一。
用埃拉托斯特尼筛法筛选 [2, 200] 时,需要划去其倍数的最大质数是哪一个?
11 13 17 97
莫比乌斯函数 μ(30) 的值是多少?
+1 −1 0 3
筛法理论中的"奇偶性障碍"是什么?
筛法只对偶数区间有效 纯粹的筛法无法区分质因数个数为奇数还是偶数的数 质数2必须总是单独处理 孪生质数总是奇偶性不同
随机奇数中不能被3或5整除的比例是多少?
8/15 7/15 2/3 4/15