発見されている最大メルセンヌ素数とリュカレーマーテスト

Decrypt history, Encrypt future™

発見されている最大メルセンヌ素数とリュカレーマーテスト

現在までに発見されている中で最大の素数は、2136279841 – 1(2の136,279,841乗ひく1)です。
これは「メルセンヌ素数」と呼ばれるタイプの数で、2024年10月にGIMPS(Great Internet Mersenne Prime Search)という共同プロジェクトによって発見されました。

📌 最大の素数の特徴

  • 桁数: 10進数で表記すると 41,024,320桁 に及びます。もしこの数字をすべて本に印刷すると、数冊の分厚い辞書が埋まるほどの膨大な長さになります。
    • log10(2)の値はおよそ 0.30103です。
    • これに指数の 136,279,841 を掛け算します。
    • 136,279,841 * 0.30103 ≒ 41,024,319.5
  • 発見方法: 今回の発見では、初めてGPU(グラフィックボード)を利用した計算とフェルマー判定法が用いられ、これまでの記録を約6年ぶりに大幅に更新しました。
  • 補足:素数は無限に存在する
    • 古代ギリシャの数学者エウクレイデス(ユークリッド)によって「素数は無限に存在する」ことが証明されているため、これで終わりではなく、今後もさらに大きな素数が発見され続けていきます。

📈 2000年以降の最大素数の変遷と「桁飛び」

発見年素数の数式10進数の桁数10進数で何桁増えたか
2001年^{13,466,917} – 14,053,946 桁
2003年2^{20,996,011} – 16,320,430 桁約226万桁
2004年2^{24,036,583} – 17,235,733 桁約91万桁
2005年2^{30,402,457} – 19,152,052 桁約191万桁
2006年2^{32,582,657} – 19,808,358 桁約65万桁
2008年2^{43,112,609} – 112,978,189 桁約317万桁 (初の1000万桁突破)
2013年2^{57,885,161} – 117,425,170 桁約444万桁
2016年2^{74,207,281} – 122,338,618 桁約491万桁
2017年2^{77,232,917} – 123,249,425 桁約91万桁
2018年2^{82,589,933} – 124,862,048 桁約161万桁
2024年2^{136,279,841} – 141,024,320 桁約1,616万桁 (過去最大のジャンプ)

1. ターゲットを「メルセンヌ数」だけに絞る(枝切り)

まず、あらゆる数字を調べるのではなく、2^p – 1(pは素数)という形をした数字(メルセンヌ数)だけを狙い撃ちにします。 なぜなら、この形の数字にだけ使える「高速な素数判定法」が存在するからです。

1. すべての素数が 2^p – 1 になるわけではない(反例はすぐ見つかる)

少し具体的な数字で考えてみると、すぐに分かります。

例えば、身近な素数である 「5」「13」 を考えてみましょう。

  • 2^2 – 1 = 3
  • 2^3 – 1 = 7
  • 2^5 – 1 = 31

「5」や「13」は飛ばされてしまっています。つまり、世の中の素数の大部分は 2^p – 1 という形をしていません。

2. 2^p – 1 の形だからといって、必ず素数になるわけでもない

逆に、「p が素数なら、2^ – 1 は絶対に素数になるのか?」というと、これも違います。

  • 2^2 – 1 = 3 (素数⭕)
  • 2^3 – 1 = 7 (素数⭕)
  • 2^5 – 1 = 31 (素数⭕)
  • 2^7 – 1 = 127 (素数⭕)

ここまでは綺麗に素数になりますが、次の素数「11」を入れてみると……

  • 2^{11} – 1 = 2047

一見素数っぽく見えますが、これは 23 * 89 で割り切れてしまうため、素数ではありません(合成数❌)。

このように、2^p – 1 の形(メルセンヌ数)が素数になる確率は、数字が大きくなればなるほどむしろ非常に稀になっていきます。

🧐 では、なぜここばかり探すのか?(分布確率と判定の速さ)

「確率が低いなら、なぜ世界中のコンピューターがこの形ばかりを血眼になって探しているのか?」というと「リュカ–レーマー・テスト」という超高速の判定法が、唯一この形にだけ使えるからです。

普通の数字(例えば、ランダムな4000万桁の奇数)が素数かどうかを100%判定しようとすると、現在の最新スーパーコンピューターを何兆年動かしても終わりません。

しかし、2^p – 1という形をした数字(メルセンヌ数)に限っては、数学的なアルゴリズムが用意されているため、現在の技術でも数日〜数週間あれば100%確実に素数かどうかの決着をつけられます。

  • 分布確率が高いわけではない(むしろスカスカで、大半はハズレ)。
  • ただし、他のエリア(普通の数字)は広大すぎて「宝探しのレーダーすら効かない場所」。
  • メルセンヌ数は、ハズレは多いけれど「一瞬で本物か偽物かを見分けられる超高性能レーダー(判定法)が使える場所」。

2. 「リュカ–レーマー・テスト」という超高速判定法

メルセンヌ数が素数かどうかを判定するために、GIMPSでは「リュカ–レーマー・テスト(Lucas–Lehmer test)」というアルゴリズムを使います。

通常、ある数が素数かどうかを調べるには、その数のルート(平方根)までの数でたくさん割り算をする必要があります。しかし、このテストを使えば、割り算を一切せず、「掛け算と引き算の特殊なループ」を p-2 回繰り返すだけで、100%確実に素数かどうかが判定するトポロジー的判定法があります。

これで探索のステップ数が天文学的な数から「現実的な数」へと劇的に枝切りされます。

リュカ–レーマー・テスト(Lucas–Lehmer test)とは、ある特定の形をした大きな数が「素数であるか」を、コンピューターで超高速かつ100%確実に判定できる数学のアルゴリズム(判定法)です。

その「特定の形」とは、先ほどから登場している $2^p – 1$($p$は素数) という形(メルセンヌ数)です。

1. 何をするテストなのか?(計算のルール)

リュカ–レーマー・テストのルールは「前の数を2乗して2を引く」という計算をひたすら繰り返します。

【テストの手順】

調べたい数を M = 2^p – 1とします。

  1. 最初の数(数列のスタート)を S_1 = 4 とします。
  2. 次の数を 「前の数を2乗して2を引く」 というルールで計算していきます。
    • S_2 = (S_1)^2 – 2
    • S_3 = (S_2)^2 – 2
  3. この計算を p-2 回 繰り返します。
  4. 最後に判定:「最後の数が、M で綺麗に割り切れたら(あまりが0なら)素数!」、割り切れなければ合成数(ハズレ)です。

2. 具体例(2^5 – 1 = 31 の場合)

p = 5 として、 31 が素数かどうかをテストしてみましょう。計算は p-2 = 3 回繰り返します。

  • スタート: S_1 = 4
  • 1回目: S_2 = 4^2 – 2 = 14
  • 2回目: S_3 = 14^2 – 2 = 194
  • 3回目(ラスト): S_4 = 194^2 – 2 = 37634

最後に、この「37634」が、最初の「31」で割り切れるかチェックします。

37634 /31 = 1214 {(あまり 0)

割り切れたので、「31は素数である」と証明されました。

3. なぜこのテストがアルゴリズムなのか?

① 割り算を最後に1回しかしない

普通の素数判定は、「2で割れるか?」「3で割れるか?」「5で割れるか?」と、何億回も割り算を繰り返す必要があります。しかし、リュカ–レーマー・テストは「2乗して2を引く」という掛け算と引き算だけで進み、最後の最後に1回だけ割り算(余りの計算)をすれば済みます。コンピューターにとって、掛け算は割り算より圧倒的に処理が軽いため、これだけで超高速化します。

② 桁数が爆発しない工夫(合同式)

「4000万桁の数を2乗していったら、桁数が何億桁、何兆桁になってパソコンがパンクするのでは?」

ここが数学の美しいところで、実は「2乗して2を引く」のステップごとに、毎回 M で割った「余り」だけを次の計算に引き継げばよいという性質があります。これにより、計算中の数字が M(4000万桁)より大きくなるのを防いでいます。

「4000万桁の数字」という、宇宙の全原子数すら超えた巨大なバケモノを相手に、「2乗して2を引いて、余りを出す」というシンプルな作業を1億3600万回ほど繰り返すだけで、「はい、これは100%素数です!」と言い切れます。

3. 「巨大な掛け算」をワープするFFT(高速フーリエ変換)

リュカ–レーマー・テストのおかげで回数は減ったものの、今度は「4000万桁の数字同士の掛け算」を何万回も繰り返す必要が出てきます。普通に筆算の要領で計算すると、桁数の2乗(4000万 * 4000万)の膨大な計算量になり、パソコンがフリーズします。

ここで使われるのが、音声や画像の処理にも使われる「FFT(高速フーリエ変換)」という数学的トリックです。

数字を「波(周波数)」のデータに変換して計算することで、4000万桁の掛け算を一瞬で終わらせることができます。

🛠️ 2024年の最新の「枝切り」(フェルマー判定とGPU)

さらに、2024年に4102万桁の素数を見つけた最新のシステムでは、もう一段階賢い枝切りが行われました。リュカ–レーマー・テストすら重すぎるほどの巨大な数字を相手にするため、まず「フェルマーの小定理」を利用した確率的な事前テスト(フェルマー判定)を大量のGPUで行いました。

これは「99.9999%素数ではない整数」を事前に枝切りするシステムです。

  1. フェルマー判定(GPU):超高速で素数ではない整数と効率的に判定できる数を99.9%ふるい落とす。
  2. リュカ–レーマー・テスト(CPU):残った集合だけを厳密にチェックする。

素数発見は、「メルセンヌ数に的を絞る数学の知恵」×「FFTなどの超高速アルゴリズム」×「GPUによる大量並列処理」という、数学とテクノロジーの融合によって成し遂げられています。

リュカ–レーマー・テストが「なぜこれで判定できるのか」という問いには、代数幾何学やトポロジー(位相幾何学)の視点から見ると、非常に美しい「幾何学的なループ(巡回)」の構造が隠れています。このテストは「高次元のトーラス(ドーナツ型の空間)の表面に描かれた線が、きれいに1周して元の場所に戻ってくるか?」を調べている一巡判定(トポロジー的なクローズド・ループの判定)です.

1. 2乗して2を引く(x^2 – 2)の幾何学的正体

まず、テストで繰り返す「x^2 – 2」という数式ですが、これは複素平面上の単位円(半径1の円)の上をダイナミックに動き回る写像(チェビシェフ多項式)と同じ構造を持っています。

複素数で円周上の点を z = e と表すと、 $$z + \frac{1}{z} = 2\cos\theta$$ になります。

つまり、リュカ–レーマー・テストで数値を次々に2乗して2を引いていく操作は、幾何学的には「円周上の点の角度を、ステップごとに2倍、4倍、8倍……と高速で回転させていく操作」です。

2. トポロジー的な「穴」と有限体の世界

通常の実数や複素数の世界では、円周(トポロジーでいう S^1)をぐるぐる回るだけですが、整数で扱っているのは素数候補 M = 2^p – 1 で割った「余り(有限体/有限環)」です。数論的な空間(スキーム)において、このメルセンヌ数が作る空間は、代数的な「閉じられたループ(代数的トーラス)」を形成します。

  • もし Mが素数なら:その空間は滑らかで、綺麗に「1つの巨大な穴(トポロジー的な障害)」が開いた円環構造になります。
  • もし M が合成数(素数でない)なら:空間が閉じず綺麗なループになりません。

3. p-2 回目で「ちょうど1周してゼロ(根)に落ちるか」

リュカ–レーマー・テストの出発点である S_1 = 4 は、この空間における「特別なスタート地点(初期位相)」です。

ここからステップを踏むごとに、点は空間のループを 2 → 4→ 8→ 16 → ちょうど p-2 回ジャンプした瞬間に、その点が「円環の真裏(特定の特異な一点)」にピタッと重なるかを最後の割り算で判定しています。

  • 空間が綺麗なドーナツ型(素数)のとき:倍速のジャンプが完全に調和し、最終ステップでジャストの位置(余り0)に到達します。トポロジー的にホモトピー(道の変形)が綺麗に閉じた(0に収縮した)ことを意味します。
  • 空間に欠陥がある(合成数)のとき:周期がズレてしまい、最終ステップで全く違う場所に止まります(余りが0にならない)。

💡 まとめ

リュカ–レーマー・テストとは、代数幾何学的に言えば「メルセンヌ数が形作る有限のねじれた空間において、特定の初期点から出発した軌道が、予定された回数のジャンプでぴったり『1周(閉ループ)』を完了するかどうか」をチェックする、きわめてトポロジー的な性質を利用した一発判定法です。この「空間の対称性と周期性」が完璧に噛み合う形が 2^p-1 という形(メルセンヌ数)だけであり、メルセンヌ数+リュカレーマーテストであれば整数空間の形を見るだけで素数かどうかが瞬時に素数判定できます。

ただし、素数を効率的に発見するアルゴリズムがあるからと言って、すべての素数を見つけることはできず、また、素数の配置距離についての法則も見出せていないことは、ABC予想やロバスト軌道問題が未解決問題である原因です。