ForHosting KIT · 数学

Lucas-Lehmer法によるメルセンヌ素数判定

素数の指数を入れると、Lucas–Lehmer判定で2^p − 1が素数かどうかが分かります。31なら29回の反復で剰余が0になり、素数2147483647が確かめられます。はい・いいえだけでなく正確な数も表示します。ブラウザで無料で使えます。

  • 無料
  • ブラウザで動作
  • 登録不要
  • データは端末の外に出ません
ご利用方法 ウェブAPIメールTelegramアプリ 近日
入力した場合
電力(W)
31
結果
メルセンヌ数
2147483647
反復回数
29
最終剰余
0

このチェッカーは素数の指数pを受け取り、2^p - 1が素数か判定します。メルセンヌ数専用の決定的なLucas-Lehmerテストを用い、正確な数値、反復回数、最終剰余を返します。合成数の指数からメルセンヌ素数は生じないため、最初に指数を検証します。そのため、不正な要求と、正しく検査した結果が合成数だった場合を明確に区別できます。

指数を選択して検証します

2から10,000までの整数pを指定してください。数を構築する前に、決定的な試し割りでpが素数か確認します。これは単なる高速化ではなく数学的な前提です。

pが合成数なら2^p - 1は代数的に因数分解できます。この場合は偽ではなく入力エラーになります。偽は、素数の指数を正しく検査し、対応するメルセンヌ数が合成数だったことを表します。

小数、未指定、配列、数値でない文字列、範囲外の値も明確に拒否します。

Lucas-Lehmer計算を理解します

最終剰余がゼロの場合に限りMは素数です。浮動小数点の丸め、確率的な証人、ネットワーク、乱数は使いません。応答には正確な十進表記、判定、方式、反復回数、最終剰余が含まれるため、計算を再現して監査できます。

候補指数を検証します

素数指数に対応するメルセンヌ数がLucas-Lehmer条件を満たすか確認します。

モジュラー漸化式を教えます

反復する剰余平方がゼロまたは非ゼロの剰余へ至る過程を示します。

決定的なテストデータを作ります

別実装の検証に使える安定した数値、反復回数、剰余を生成します。

指数が素数なら必ずメルセンヌ素数ですか?

いいえ。 必要条件ですが十分条件ではなく、最終剰余で決まります。

指数が合成数だとどうなりますか?

偽という答えではなくエラーになります。指数が合成数ならメルセンヌ数は必ず合成数になり、Lucas–Lehmer判定の対象外だからです。2から10,000までの素数を指数に入れてください。

2^31 − 1はメルセンヌ素数ですか?

はい。指数31では2147483647を作り、Lucas–Lehmerの反復を29回行って最終剰余が0になるので、素数であることが証明されます。

結果が偽のときは何を意味しますか?

素数の指数を正しく判定した結果、そのメルセンヌ数が合成数だったという意味です。これは通常の結果で、指数が範囲内の正しい素数でないときにだけ出るエラーとは別物です。

どの範囲の指数を調べられますか?

2から10,000までの素数の指数です。小数、空欄、数字以外の文字は受け付けません。指数2は特別な場合で、3を素数として反復0回で返します。

このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。

POSThttps://api.kit.forhosting.com/numth/mersenne-prime-check

Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。

curl -X POST https://api.kit.forhosting.com/numth/mersenne-prime-check \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"p":31}'
{
  "p": 31
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "numth.mersenne_prime_check",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。

1リクエストあたり$0.002

単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。

min_p2
max_p10000
HTTPコード意味
401unauthorizedAPIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。
402insufficient_balance残高が不足しています。チャージ後に再度お試しください。
404unknown_type指定されたタスクタイプは存在しません。タイプ名を確認してください。
429rate_limitedリクエストが多すぎます。しばらく待ってから再度お試しください。

指数を選択して検証します

pフィールドとexponent別名を利用でき、テキスト中心のクライアントでは整数文字列も受け付けます。

Lucas-Lehmer計算を理解します

pの検証後、正確なBigInt演算でM = 2^p - 1を作ります。奇素数pではs = 4から始め、sを「その平方から2を引き、Mを法として剰余を取った値」にp - 2回更新します。p = 2ではM = 3となり、反復なしで剰余ゼロです。

結果を正しく活用します

真は最終剰余がゼロ、偽はpが素数でも2^p - 1が合成数であることを示します。無制限の探索サービスではなく、各要求で範囲内の指数を1つだけ評価します。結果は変化しないため、大量処理ではキャッシュをご利用ください。is_primeは、すでに検証済みの指数ではなくメルセンヌ数についての判定です。JSONの整数精度を失わないよう、mersenneとfinal_residueは十進文字列です。ブラウザーもAPIと同じ決定的な処理を使い、自動呼び出しは1回$0.002です。

pが合成数の場合はどうなりますか?

pは素数でなければならないため、無効入力エラーを返します。

数値と剰余が文字列なのはなぜですか?

JSONの正確な整数範囲を超える場合も、全桁を保持するためです。

確率的なテストですか?

いいえ。素数指数のメルセンヌ数に対して決定的です。

APIでの確認料金はいくらですか?

1回$0.002です。ブラウザー版も同じ純粋な計算を使います。

KITの完全なドキュメントを見る →