Lucas-Lehmer法によるメルセンヌ素数判定
このチェッカーは素数の指数pを受け取り、2^p - 1が素数か判定します。メルセンヌ数専用の決定的なLucas-Lehmerテストを用い、正確な数値、反復回数、最終剰余を返します。合成数の指数からメルセンヌ素数は生じないため、最初に指数を検証します。そのため、不正な要求と、正しく検査した結果が合成数だった場合を明確に区別できます。
無料で実行
指数を選択して検証します
2から10,000までの整数pを指定してください。pフィールドとexponent別名を利用でき、テキスト中心のクライアントでは整数文字列も受け付けます。数を構築する前に、決定的な試し割りでpが素数か確認します。これは単なる高速化ではなく数学的な前提です。pが合成数なら2^p - 1は代数的に因数分解できます。この場合は偽ではなく入力エラーになります。偽は、素数の指数を正しく検査し、対応するメルセンヌ数が合成数だったことを表します。小数、未指定、配列、数値でない文字列、範囲外の値も明確に拒否します。
Lucas-Lehmer計算を理解します
pの検証後、正確なBigInt演算でM = 2^p - 1を作ります。奇素数pではs = 4から始め、sを「その平方から2を引き、Mを法として剰余を取った値」にp - 2回更新します。最終剰余がゼロの場合に限りMは素数です。浮動小数点の丸め、確率的な証人、ネットワーク、乱数は使いません。p = 2ではM = 3となり、反復なしで剰余ゼロです。応答には正確な十進表記、判定、方式、反復回数、最終剰余が含まれるため、計算を再現して監査できます。
結果を正しく活用します
is_primeは、すでに検証済みの指数ではなくメルセンヌ数についての判定です。真は最終剰余がゼロ、偽はpが素数でも2^p - 1が合成数であることを示します。JSONの整数精度を失わないよう、mersenneとfinal_residueは十進文字列です。教育、回帰テスト、数学的な実演、範囲を限定した確認に適しています。無制限の探索サービスではなく、各要求で範囲内の指数を1つだけ評価します。ブラウザーもAPIと同じ決定的な処理を使い、自動呼び出しは1回$0.002です。結果は変化しないため、大量処理ではキャッシュをご利用ください。
活用例
候補指数を検証します
素数指数に対応するメルセンヌ数がLucas-Lehmer条件を満たすか確認します。
モジュラー漸化式を教えます
反復する剰余平方がゼロまたは非ゼロの剰余へ至る過程を示します。
決定的なテストデータを作ります
別実装の検証に使える安定した数値、反復回数、剰余を生成します。
よくある質問
pが合成数の場合はどうなりますか?
pは素数でなければならないため、無効入力エラーを返します。
指数が素数なら必ずメルセンヌ素数ですか?
いいえ。必要条件ですが十分条件ではなく、最終剰余で決まります。
数値と剰余が文字列なのはなぜですか?
JSONの正確な整数範囲を超える場合も、全桁を保持するためです。
確率的なテストですか?
いいえ。素数指数のメルセンヌ数に対して決定的です。
APIでの確認料金はいくらですか?
1回$0.002です。ブラウザー版も同じ純粋な計算を使います。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
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}'const res = await fetch("https://api.kit.forhosting.com/numth/mersenne-prime-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"p": 31
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/mersenne-prime-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"p": 31
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/mersenne-prime-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"p":31}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"p":31}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/mersenne-prime-check", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"p": 31
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.mersenne_prime_check",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
min_p | 2 |
max_p | 10000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |