算術と数論
篩法
範囲内の整数から小さい素数の倍数を取り除いた後に残る個数を推定する技法。
直観素数ごとに倍数をふるい落とす
2から100までの数の格子を思い浮かべてほしい。2自身を除くすべての2の倍数を消す。次に3自身を除くすべての3の倍数を消す。次に5自身を除くすべての5の倍数を消す。生き残った各数についてこれを続けると、最後に消されずに残るものがちょうど素数である。この古代からのふるい分けの過程——「篩」——は単に素数を列挙する方法ではない;篩法は同じ発想を精密な計数の道具に変え、一つ一つ列挙することが計算上絶望的な場合でも、ある範囲内でどれだけの整数がある篩をくぐり抜けて生き残るかを推定する。
1..60 上のエラトステネスの篩:n を動かして素数 ≤n の倍数を消し込む(赤)と、残った緑のマスが素数となる。中高エラトステネスの篩
定義: エラトステネスの篩
N までのすべての素数を列挙するには:2,3,…,N を書き出す;未マークの最小の数 p を繰り返し取り、それを素数と宣言し、p のすべての倍数(p2 から)を合成数としてマークする;p2>N になったら止める。
P(z)=p<z∏p なぜ p2>N で止めるのか?任意の合成数 n≤N は ≤N の素因数を持つ(そうでなければ最小の2つの素因数の積が N を超えてしまう)ので、N までのすべての素数がマークを終えれば、マークされずに残ったものは本当にそれを暴く因数を持たない——素数でなければならない。すべての素数 p<z にわたる積 P(z)=∏p<zp は、篩がふるいにかける「小さい」素数の集合そのものであり、篩理論ではこれを篩の水準と呼ぶ。
[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 |
大学2つの定理:なぜ篩は機能するのか、そしてそれでどう数えるか
整数 n≥2 が素数であるための必要十分条件は、p≤n を満たすいかなる素数でも割り切れないことである。
なぜ正しいのか?
この同値性こそが篩を早期に止めることを可能にするものである:N までのすべての素数が倍数を消し終えれば、残るいかなる数も合成数だと立証する証人はもう存在しない。したがって、より大きい素数を検査する(あるいは消す)ことは証明可能に無駄な作業である。
証明
(⇐) n が ≤n の素因数を持たないと仮定する。もし n が合成数なら n=ab、1<a≤b<n と書ける。このとき a≤n(そうでなければ a>n かつ b≥a>n となり ab>n を強制し矛盾)であり、a の最小素因数 p は p≤a≤n を満たすので、p は n の ≤n の素因数となり——仮定に矛盾する。よって n はそのような分解を持たず、n は素数である。
(⇒) n が素数なら、その正の約数は 1 と n のみであり、p<n を満たすいかなる素数もそれを割り切らない。特に p≤n のものも割り切らない。
これらを合わせると2つの条件が同値であることが示され、これはまさに篩で用いられる終了条件である:N までのすべての素数を処理した後、[2,N] の中でまだマークされていないものはすべて右辺を満たし、したがって素数である。
A={1,2,…,x} と素数 p<z の集合 P に対し、P(z)=∏p<zp と互いに素な a∈A の個数は S(A,P,z)=d∣P(z)∑μ(d)⌊dx⌋(μ はメビウス関数)であり、z=x+1 とすると π(x)−π(x)+1=S(A,P,x)=∑d∣P(x)μ(d)⌊x/d⌋ が得られる。
なぜ正しいのか?
これは「倍数を消す」という操作の正確で定量的なバージョンである:格子に物理的に印をつける代わりに、どの小さい素数がそれらを割り切るかについての包除原理で生存者を直接数える。これは双子素数や有界な素数間隔を攻略するために使われるすべての現代的な篩(ブラン、セルバーグ、大篩、GPY)の祖先であり——それらはすべて、根本的にはこの正確な公式が生み出す誤差項を制御するためのより賢い方法である。
証明
任意の整数 a∈A が P(z) と互いに素であるための必要十分条件は、p<z を満たすいかなる素数でも割り切れないことである。各約数 d∣P(z)(これらの素数の部分集合の無平方な積)について、A={1,…,x} における d の倍数の個数はちょうど ⌊x/d⌋ である。
p<z に対する事象「p∣a」に関する包除原理により、P の中の少なくとも1つの素数で割り切れる a∈A の個数は ∑p<z⌊x/p⌋−∑p<q⌊x/(pq)⌋+∑p<q<r⌊x/(pqr)⌋−⋯ であり、掛け合わせる素数の個数に応じて符号が交代する。この交代する符号は、対応する無平方な d∣P(z) のメビウス関数 μ(d) そのものである:μ(1)=1、d が k 個の異なる素数の積のとき μ(d)=(−1)k。
したがって P の中の少なくとも1つの素数で割り切れる個数は −∑d∣P(z),d>1μ(d)⌊x/d⌋。これを ∣A∣=⌊x⌋=x(d=1 の項、μ(1)⌊x/1⌋=x)から引くと P(z) と互いに素な個数が得られる:S(A,P,z)=x−∑d∣P(z),d>1μ(d)⌊x/d⌋=∑d∣P(z)μ(d)⌊x/d⌋。
最後に z=x+1 とすると P はちょうど ≤x の素数となる:これらすべてと互いに素な任意の a∈[2,x] は 1 であるか、または(上の定理により ≤x の素因数を持たないので)>x の素数であるので、S(A,P,x+1)=1+(π(x)−π(x)) となり、主張の等式が得られる。
π(x)−π(x)+1=S(A,P,x)=d∣P(x)∑μ(d)⌊x/d⌋ 大学実世界での応用と具体例
篩法は実用的な計算と純粋数学の深い突破口の両方を支えている。ソフトウェアでは、エラトステネスの篩の区間分割版が大規模に素数を列挙する標準アルゴリズムであり、小さい素数による高速な篩は、RSA鍵生成で高コストな素数判定(ミラー–ラビンなど)を実行する前の普遍的な第1段階のフィルタであり——ランダムな奇数候補の約80%をマイクロ秒単位で棄却する。純粋数学では、洗練された篩(ブラン、セルバーグ、GPY、メイナード–タオ)が素数間隔に関する現代のあらゆる突破口の原動力となっている。
例: ルジャンドルの公式で30までの素数を数える
x=30、z=6(30≈5.48 なので篩う素数は 2,3,5)としてルジャンドルの公式を適用し、π(30) を最初から計算せよ。
解答
ここで P(6)=2⋅3⋅5=30 であり、その 23=8 個の無平方な約数は 1,2,3,5,6,10,15,30。
各々について μ(d)⌊30/d⌋ を計算する:+⌊30/1⌋=30;−⌊30/2⌋−⌊30/3⌋−⌊30/5⌋=−15−10−6=−31;+⌊30/6⌋+⌊30/10⌋+⌊30/15⌋=+5+3+2=+10;−⌊30/30⌋=−1。
合計すると S(A,P,6)=30−31+10−1=8。ルジャンドルの恒等式 π(30)−π(30)+1=8 と π(30)=π(5)=3(素数 2,3,5)より、π(30)=8+3−1=10——上の表に挙げた 10 個の素数と一致する。
例: 小さい素数による事前篩はRSA鍵生成でどれだけの計算を省くか?
ランダムな奇数候補に対して高コストなミラー–ラビン判定を実行する前に、RSAライブラリはまずそれが 3,5,7,11,13 で割り切れるかを調べる。この5つの素数による事前篩を生き残るランダムな奇数の割合はいくらか?
解答
中国剰余定理により、異なる素数 3,5,7,11,13(および既に奇数に固定された 2)を法とする剰余類は、1周期 2⋅3⋅5⋅7⋅11⋅13=30,030 にわたって独立である。
ランダムな奇数が p で割り切れない確率は 1−1/p なので、5つのフィルタすべてを生き残る割合は (1−1/3)(1−1/5)(1−1/7)(1−1/11)(1−1/13)=32⋅54⋅76⋅1110⋅1312=150155760=1001384≈38.4%。
つまり5回の小さな剰余チェック——数CPUサイクル——だけで、高コストなべき乗剰余判定を呼ぶ前に合成数の奇数候補の 61% 以上が棄却される;実際のライブラリはこの事前篩を最初の数百個の素数まで拡張し、合成数の約80〜90%をほぼ無コストで捨てている。
エラトステネスの篩で [2, 200] を篩うとき、倍数を消す必要がある最大の素数はどれか?
メビウス関数 μ(30) の値はいくらか?
篩理論における「偶奇性障壁(パリティ問題)」とは何か?
ランダムな奇数のうち、3でも5でも割り切れないものの割合はいくらか?