安全素数チェッカー
素数pが安全素数か、つまり(p − 1)/2も素数かを判定します。23はその半分の11が素数なので安全素数で、11はソフィー・ジェルマン素数になります。半分の値は常に表示されるので、自分で確かめられます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 電力(W)
- 23
- Q
- 11
安全素数チェッカーは素数である整数 p を受け取り、対応する q = (p − 1) / 2 も素数か判定します。両方が素数なら、p は安全素数、q は対応するソフィー・ジェルマン素数です。合成数の入力を単なる偽として扱わずエラーにするため、定義に沿った回答を保ち、自動処理でも入力ミスを確実に発見できます。
安全素数が表すもの
安全素数とは、素数 p に対応する q = (p − 1) / 2 も素数になる数です。たとえば 23 は素数であり、半分に対応する 11 も素数なので安全素数です。一方、13 は素数ですが、(13 − 1) / 2 は合成数の 6 になるため安全素数ではありません。
本チェッカーは、この2段階の検査を明確に分けます。最初に、ご指定の前提である p 自体の素数性を確認し、それを満たした場合にだけ q を計算して検査します。例外的な素数 2 も入力できますが、安全素数ではありません。
候補は整数ではない 0.5 となり、素数にはなれないためです。この扱いにより、有効な入力を暗黙に奇素数だけへ狭めることなく、定義をそのまま適用しています。
決定的な判定の仕組み
この機能では、p が 2 以上かつ JavaScript で安全に表現できる最大整数以下の整数であることを検証します。その後、BigInt 演算、小さい素数による割り切れ方の確認、モジュラー累乗、対応範囲全体で決定的となる固定の Miller–Rabin 証人集合を用いて、厳密な素数判定を行います。
証人を固定することで、同じ呼び出しが異なる経路を通ったり、確率だけに基づく回答になったりすることを防ぎます。有効な奇素数では、1を引くと偶数になり、2による除算は正確です。得られた q に同じ素数判定を適用し、真偽値を返します。
計算はすべてローカルで行われ、ネットワーク、外部表、乱数、時計を使用しません。p と q を安全に表現できる範囲に制限するため、数値出力も正確です。
学習やソフトウェアでの活用方法
通常の素数と安全素数の違いそのものを確認したい場合にご利用ください。整数論の授業では、対になった関係を簡潔に示し、q も表示するため、学習者が計算を自分で確かめられます。テストデータを作る際には、別の仕組みで選んだ候補を、プロトコル演習やベンチマークへ入れる前に検証できます。
真なら両方が通過しています。本機能は検証や教育に適していますが、素数の生成、合成数の因数分解、持ち運べる素数証明書の発行、実運用暗号への適合保証は行いません。大きな暗号パラメーターは安全整数の上限を超えることが多く、専用の多倍長ライブラリとプロトコルごとの審査が必要です。
活用例
整数論の演習を確認
提示された安全素数を検査し、対応するソフィー・ジェルマン候補も表示して、定義の各条件をご確認いただけます。
生成済みテストデータを検証
別の決定的生成器が選んだ素数を、プロトコルやアルゴリズムのテストデータへ保存する前に安全素数か確認できます。
素数と安全素数を分類
合成数の入力と正当な否定結果を混同せず、既に素数である値を半分の候補の素数性によって分類できます。
よくある質問
23 が安全素数なのはなぜですか?
23 は素数で、(23 − 1) / 2 は同じく素数の 11 です。
暗号用の安全素数を生成できますか?
できません。 安全整数範囲内の値を1つ検査するだけであり、暗号プロトコル向けパラメーターの生成や認証は行いません。
13が安全素数でないのはなぜですか?
13は素数ですが、(13 − 1)/2は6で合成数です。安全素数には両方が素数であることが必要なので、入力した数が素数でも答えは「いいえ」です。
素数でない数を入力するとどうなりますか?
単なる「いいえ」ではなく、メッセージ付きで受け付けません。合成数はそもそも安全素数になりえないためです。否定の結果とは考えず、数を直して再度お試しください。
2は安全素数ですか?
いいえ。2は素数として受け付けますが、(2 − 1)/2は0.5で整数ではないため素数になれません。そのため2は安全素数ではありません。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/numth/safe-prime \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"p":23}'const res = await fetch("https://api.kit.forhosting.com/numth/safe-prime", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"p": 23
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/safe-prime",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"p": 23
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/safe-prime", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"p":23}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"p":23}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/safe-prime", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"p": 23
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.safe_prime",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
結果には p、計算した q、明確な真偽値 safe_prime が含まれます。
安全素数が表すもの
同じ条件は、素数 q を使って p = 2q + 1 と表せることでも示せます。この小さい方の q はソフィー・ジェルマン素数と呼ばれます。応答には p と q が示され、safe_prime が真または偽に設定されるため、中間値を別途計算する必要はありません。
決定的な判定の仕組み
同じ入力からは常に同じ JSON 結果が得られます。p が合成数なら、満たされなかった前提を示す invalid_input エラーで処理を停止します。safe_prime を偽として返すと、合成数を「安全ではない素数」のように誤解させるため、そのような応答はしません。
学習やソフトウェアでの活用方法
アプリケーションでは、invalid_input を否定結果や再試行すべき一時障害ではなく、呼び出し側が修正すべき入力として扱ってください。成功応答で safe_prime が偽なら、p は素数判定を通過したものの q は通過しなかったことを示します。同一実装をブラウザーでは無料で、API 自動化では1回 $0.002 で利用でき、入出力規則も共通です。
技術的な質問
安全素数チェッカーの料金はいくらですか?
API は1回 $0.002 です。同じ決定的な検査をブラウザー画面では無料で実行できます。
p が合成数の場合はどうなりますか?
安全素数は素数 p に対してのみ定義されるため、invalid_input を返します。合成数に対して safe_prime を偽とは返しません。
2 は安全素数に含まれますか?
含まれません。2 は素数ですが、(2 − 1) / 2 は整数の素数ではない 0.5 なので、safe_prime は偽です。