エラトステネスの篩 単語


ニコニコ動画でエラトステネスの篩の動画を見に行く

エラトステネスノフルイ

6.6千文字の記事

エラトステネスの篩(ふるい)とは、素数めるアルゴリズムである。

2000年以上前に考案された方法ながら、ユークリッドの互除法と並んで現在でも応用されている重要な方法である。

概要

エラトステネスとは紀元前3世紀頃の学者であり、地球の大きさを誤差%以内で推定した事などで有名な人物である。エラトステネスの篩はそんな彼の名に由来し、古くは、1世紀~2世紀の数学者ニココスの著作「算術入門」において数回言及されている。例えば第13章で「これらの数の算出法はエラトステネスによって篩と呼ばれた、なぜなら……」などと記載がある[1]。(ただし「エラトステネスが考案した」と明言する記載ではないようだ?)

ながらも確実にすべての素数めることができる、優秀なアルゴリズムである。合成数が次々に消去され、素数が残っていく様が「ふるいにかける」ようであるからこの名前がついた。

以下がそのアルゴリズムの概略である。

自然数におけるアルゴリズム

  1. 自然数を並べ、初めに1を除外し、次に2をマークして2の倍数を消去する。
  2. 次に残った数で一番小さい3をマークし3の倍数を消去する。
  3. 次に残った数で一番小さい5をマークし…といった作業を繰り返す。
  4. マークされ表に残った数が素数である。

以上の作業を繰り返すことで素数めることができる。以下は100までの表。赤色素数である。

1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100


この表から、2,3,5,7,11,13,17,…が素数であることが分かった。

利点

  • nまで作業が終わればn2までの素数漏れなくまる。この表で言えば10以下の素数、つまり7を見つける手順が終わった時点で100までの素数すべてが明らかになる。
  • 素数のあらわれる頻度や法則などの素数の持つ性質と関係に素数をくまなく列挙することができる。
  • 仮に素数を飛ばしてしまっても合成数で素数が消去されることはいので、後に検算をした際にその素数から追加で消去していけば正しい表が得られることも重要な利点である。
  • 素数pの倍数を消去する際、p×2からp×(p-1)までの数は消去されているので、p×pから消去していけば処理がくなる。

欠点

  • 素数をくまなくめることはできるが、この方法から素数の現れる法則を見出すことはできない。素数かどうかを判定する方法ではなく、あくまで素数リストアップする方法である。
  • マークした素数以上の全ての数を毎回チェックして回る必要があるため時間がかかる。工夫しないとN以下の素数を調べるのにO(NN)くらいの時間がかかるらしい。工夫次第でO(N)に近づいていくがそれを下回ることはいと思われる。
  • 途中で表を大きくしようとしたい場合は追加した分を2の倍数から埋め直す必要がある。
  • 大きな素数める場合でも2から始めないと数え漏れが出てしまうので融通が利かない。

関連動画

関連項目


応用

以上が義務教育で教わる内容である。

以下、応用例としてガウス整数と多項式、ゼータ関数の式変形について記述する。

ガウス整数に対するエラトステネスの篩

ガウス整数とは、a,bを整数としてz'=a+biで表すことのできる数である。ガウス整数にも素数に対応する概念が存在し、ガウス素数と呼ばれる。ガウス素数普通素数と同じで、それ以上素因数分解することができない数である。こちらもエラトステネスの篩でめることができる。

以下に出てくる「単元」とは、乗法の逆元を持つ元である。自然数なら1、整数なら1と-1、有理数なら0を除くすべての元である。体は0を除くすべての元が単元になる。

ガウス整数におけるアルゴリズム

  1. 0を中心にマス状にガウス整数を並べ、0と1,-1,i,-iを除外する。1,-1,i,-iは単元。
  2. (1+i)の単元倍をマークし、1+iの倍数(1+i)(x+yi)=(x-y)+(x+y)iを消去する。
  3. 残った数で0に近い(1+2i)の単元倍をマークしてその倍数(x-2y)+(x+2y)iを消去する。
  4. 以下同じようにして0に近い数から順に±(a+bi)と±(b-ai)をマークして倍数を消去を繰り返す。
  5. マークされた数がガウス素数である。

以下が上記のアルゴリズムで得られたガウス素数の表である。ガウス素数

O O O O O O O O O O O O O O O O O O O O O O O
O O O O O O O O O O O O O O O O O O O O
O O O O O O O O O O O O O O O O O
O O O O O O O O O O O O O O O O O O O O O
O O O O O O O O O O O O O O O O O O O
O O O O O O O O O O O O O O O O
O O O O O O O O O O O O O O O O O O O
O O O O O O O O O O O O O O O O O
O O O O O O O O O O O O O O O O O
O O O O O O O O O O O O O O O O O O
O O O O O O O O O O O O O O O O O
O O O O O O O i O O O O O O O
O O O O O O O O -1 0 1 O O O O O O O O
O O O O O O O -i O O O O O O O
O O O O O O O O O O O O O O O O O
O O O O O O O O O O O O O O O O O O
O O O O O O O O O O O O O O O O O
O O O O O O O O O O O O O O O O O
O O O O O O O O O O O O O O O O O O O
O O O O O O O O O O O O O O O O
O O O O O O O O O O O O O O O O O O O
O O O O O O O O O O O O O O O O O O O O O
O O O O O O O O O O O O O O O O O
O O O O O O O O O O O O O O O O O O O O
O O O O O O O O O O O O O O O O O O O O O O O

上記の表から1±i、1±2i、2±i、3、3i、4±i、1±4i、…などがガウス素数であることが分かった。aを単元倍した元bを、aに同伴な元bと呼ぶ。例えば±(1+2i)、±(2-i)は互いに同伴なガウス素数である。

ガウス素数は0付近で美しい模様を描く。0から離れた部分も整数素数べ均等に分布しており、一定のパターンが存在しているように見える。有限距離以内でガウス素数同士が隣接するかどうかなどが未解決問題として存在する。

  • 段階2.で2から始めても良いが、次の1±iの倍数の消去の過程で2が消えてしまう。つまり、ガウス整数において2はガウス素数ではないという事がわかる。実際、2=(1+i)(1-i)であり、素因数分解できる。これは自然数の場合に「仮に素数を飛ばしても検算の時にそこからやり直せば問題ない」という事に対応する。
  • こちらは0を中心に(2n+1)×(2n+1)マスまで終わっていれば少なくとも中心から半径n2マスまでのガウス素数まる。また、消去される倍数が正方形の頂点上に並ぶので各ステップで消去される倍数もキレイパターンを描く。
  • 欠点はやはり時間がかかるところ。途中から表の拡をするのはかなり難しい。

多項式環に対するエラトステネスの篩

既約多項式とは、それ以上小さな次数の多項式に因数分解できない多項式をす。多項式環において既約多項式は素数と同様の働きを持つ。同じ多項式でも係数体により既約か可約か変化する。

整数素数pで割ったあまりで分類すると有限体Fpになる。Fpの元を係数とする多項式f(x)∈Fp[x]を考える。例えば、F2係数多項式f(x)∈F2[x]は係数が0または1の多項式である(1+1=0に注意して計算する)。f(x)が既約であるかどうかをエラトステネスの篩を用いて列挙する事で判別できる。

準備として、多項式をその係数のみで表すことにする。例えば、F2[x]においてx3+x2+1 → 1101、(x+1)(x2+x)=x3+x → 11×110=1010。F3[x]において(x+2)(2x+1)=2x2+2x+2 → 12×21=222。単純な2進数や3進数とは異なることに注意。

F2[x]におけるアルゴリズム

  1. 多項式を小さい順から列挙し、1を除外する。次にxにマークし、xにx以上の多項式を掛け算して列挙したものを消去する。
  2. 次に、残った多項式で一番小さな多項式x+1をマークし、残った多項式をx+1から掛け算して列挙したものを消去する。
  3. 以下繰り返し、マークされた多項式が既約多項式、消去された多項式が可約多項式である。
1 10 11 100 101 110 111 1000
1001 1010 1011 1100 1101 1110 1111 10000
10001 10010 10011 10100 10101 10110 10111 11000
11001 11010 11011 11100 11101 11110 11111 100000

この表からF2[x]において、x,x+1,x2+x+1,x3+x+1,x3+x2+1、x4+x+1,x4+x3+1、x4+x3+x2+x+1、…が既約多項式と分かった。

F3[x]におけるアルゴリズム

  1. 多項式を小さい順に並べ、初めに単元である1,2を除外する。xにマークし、xとx以上の多項式を掛け算して列挙したものを消去。
  2. 残った多項式で最小のx+1にマークし、x+1とx+1以上の残った多項式を掛け算して列挙したものを消去。
  3. 以下繰り返し、最後に残った物のうち係数が全て2の物を消去する。
  4. マークされ残った多項式が既約多項式。
1 2 10 11 12 20 21 22 100
101 102 110 111 112 120 121 122 200
201 202 210 211 212 220 221 222 1000
1001 1002 1010 1011 1012 1020 1021 1022 1100
1101 1102 1110 1111 1112 1120 1121 1122 1200
1201 1202 1210 1211 1212 1220 1221 1222 2000
2001 2002 2010 2011 2012 2020 2021 2022 2100
2101 2102 2110 2111 2112 2120 2121 2122 2200
2201 2202 2210 2211 2212 2220 2221 2222 10000

ニックな多項式(最大次数の係数が1の多項式)に限定した表は以下のとおり。

1 2 10 11 12 20 21 22 100
101 102 110 111 112 120 121 122 200
201 202 210 211 212 220 221 222 1000
1001 1002 1010 1011 1012 1020 1021 1022 1100
1101 1102 1110 1111 1112 1120 1121 1122 1200
1201 1202 1210 1211 1212 1220 1221 1222 2000
2001 2002 2010 2011 2012 2020 2021 2022 2100
2101 2102 2110 2111 2112 2120 2121 2122 2200
2201 2202 2210 2211 2212 2220 2221 2222 10000

この表から、F3[x]においてx,x+1,x+2,2x+1,x2+1,x2+x+2,x2+2x+2,…が既約多項式と分かった。

1,2は単元なので、例えば(x2+2x+2)を2倍した式(2x2+x+1)は同伴な既約多項式である。これはちょうど有理数係数の既約多項式について、定数倍した式を同一の式と見なすことと対応する(有理数は0を除いた全ての数が単元であるため)。


  • 自然数の場合と同じように、n番までの既約多項式をめればn2までの既約多項式が漏れなく列挙できる。具体的にはn次多項式まで判定が終われば2n次多項式までの既約多項式が得られる。
  • 係数をFp[x]に限定するのは、Z[x]だと1次式の時点で無限個あり作業が終わらないためである。
  • 欠点も大体同じで、時間がかかること、次数のおおきな多項式が既約かどうか調べたい時でも1次の多項式から調べないと列挙漏れが出てしまうこと、表の拡がしにくいことが挙げられる。また、整数と異なり消去される多項式の法則性が乏しく、実際に計算してみないと既約かどうかすぐにはわからない。

論理的背景

これは環論の言葉でいえば、単項イデアル整域の素イデアルリストアップするアルゴリズムである。上記の例のように全ての元をうまく並べることができるような環に対して流用することができる。自然数は環ではないが整数に拡すれば一貫性が保たれる。

多項式環において、既約多項式は素数のような役割を持つためしばしば既約であるかどうかが問題になるが、一般に多項式の既約判定は難しい。しかし、Fp[x]で既約→Z[x]で既約→Q[x]で既約、が一般に成り立つので、既約判定の一つとして有限体係数に落とし込んで判定する方法がある。つまり、有理係数を定数倍して整数にし、適当素数合同をとることでQ[x]をFp[x]で判断する事が可な場合がある。

F2[x]でx2+x+1が既約と分かったが、係数を2で割ったあまりが同じになる多項式、x2+3x+1, x2+x+3, x2+3x+3、…、あるいはF3[x]でx2+2x+2は既約だったが、係数を3で割ったあまりが同じになるx2+2x+5, x2+5x+2、…、などもZ[x]、ひいてはQ[x]において既約多項式である。F2[x]においてx3+x2+1が既約であると知っていれば、3x3+27x2+14x+7が既約多項式であるとすぐに判別できるのである。ただし、あらゆる素数pでFp上可約だがZ上既約という多項式も存在するので万ではないという事に注意しなければならない。

リーマンゼータ関数との関係

エラトステネスの篩とは直接関係しないが、参考として記述する。

リーマンゼータ関数ζ(s)とは以下の関数である。

ζ(s)=1/1s+1/2s+1/3s+…=Σn1/ns

この関数較的シンプルな形をしているが様々な性質を持ち、数学の深淵に迫る関数の一つとして研究の対となっている。この関数素数とも関係しており、和を積に式変形する方法の一つにエラトステネスの篩のようなふるまいを見せるものがある。式変形は以下の通り。

ζ(s)=1+1/2s+1/3s+1/4s+…

1/2sζ(s)=1/2s+1/(2s×2s)+1/(2s×3s)+1/(2s×4s)+…

(1-1/2s)ζ(s)=1+1/3s+1/5s+1/7s+1/9s+1/11s+…

1/3s(1-1/2s)ζ(s)=1/3s+1/(3s×3s)+1/(3s×5s)+1/(3s×7s)+…

(1-1/3s)(1-1/2s)ζ(s)=1+1/5s+1/7s+1/11s+1/13s+1/17s+1/19s+1/23s+1/25s+…

1/5s(1-1/3s)(1-1/2s)ζ(s)=1/5s+1/(5s×5s)+1/(5s×7s)+…

(1-1/5s)(1-1/3s)(1-1/2s)ζ(s)=1+1/7s+1/11s+1/13s+…

…(1-1/11s)(1-1/7s)(1-1/5s)(1-1/3s)(1-1/2s)ζ(s)=1

ζ(s)=1/((1-1/2s)(1-1/3s)(1-1/5s)…)=1/(Πp(1-1/ps)) (pは素数

このようにして合成数の項がエラトステネスの篩と同じ順番で次々と消去され、素数の項が左辺に累積していくことがわかる。

関連項目

脚注

  1. *Internet Archiveに収録されている、Nicomachi Geraseni Pythagorei - Introductionis arithmeticae libri II(Richard Gottfriedによる1866年出版のバージョン)exitより。
この記事を編集する

掲示板

おすすめトレンド

ニコニ広告で宣伝された記事

記事と一緒に動画もおすすめ!
もっと見る

急上昇ワード改

最終更新:2025/12/07(日) 18:00

ほめられた記事

最終更新:2025/12/07(日) 18:00

ウォッチリストに追加しました!

すでにウォッチリストに
入っています。

OK

追加に失敗しました。

OK

追加にはログインが必要です。

           

ほめた!

すでにほめています。

すでにほめています。

ほめるを取消しました。

OK

ほめるに失敗しました。

OK

ほめるの取消しに失敗しました。

OK

ほめるにはログインが必要です。

タグ編集にはログインが必要です。

タグ編集には利用規約の同意が必要です。

TOP