高速合同累乗計算機
大きな累乗の余りを、桁あふれなしで正確に求めます。2の10乗を1000で割った余りは24、3の5乗を13で割った余りは9です。底、指数、法はそれぞれ最大2048桁まで使えます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 底
- 2
- 指数
- 10
- 絶対値
- 1000
- 結果
- 24
高速合同累乗は、整数の底を整数の指数でべき乗し、法 m で割ったときの正確な非負の余りは何か、という一点に答えます。その剰余は RSA 風の授業デモ、Diffie–Hellman の鍵交換の概要、プログラミングコンテストの問題、固定幅型のオーバーフローや 2^53 を超える精度損失を避けて大きな整数をべき乗しなければならない本番スクリプトを支えます。
高速合同累乗が計算するもの
整数 base、exponent、法 m が与えられると、合同累乗は、底の指数乗が r と法 m で合同となる、0 から m 引く 1 までの閉区間にある一意の余り r を返します。記号では r ≡ base^exponent (mod m) です。
素朴な方法は底を exponent 回自分自身と掛けてから初めて還元するため、中間値が通常の浮動小数点や固定幅整数をはるかに超え、精度が失われると静かに失敗します。高速合同累乗は代わりに毎回の乗算の後に還元し、指数ビットを下位から上位へ走査しながら走行中の底を二乗するため、作業量は指数の十進の大きさではなくビット長に比例します。
m が 1 のとき、あらゆる整数は 0 と合同なので結果は常に 0 です。指数が 0 のときは、m が 1 より大きい限り任意の底に対して結果は 1 となり、数論とプログラミングライブラリで使われる空積の慣例に一致します。負の底はまず法 m の非負剰余系へ還元され、乗算列が符号付きの余りを混在させません。
負の指数は、底と m が互いに素でないときに存在しないことがある逆元を要するため拒否され、その逆元ステップはこの計算機の範囲外です。
制限・性能と開発者の利用場面
二進の合同累乗は指数のビットごとに定数回の合同乗算を行うため、指数をほぼ倍にすると作業もほぼ倍になり、法が大きいと桁長に応じて各乗算のコストが増えます。百万桁の法、中国剰余定理による分解、サイドチャネル耐性のある定数時間の暗号プリミティブが必要な場合は専用の暗号ライブラリが必要です。
教員は学生が証明を提出する前に a^b mod m の手計算を検証するのに使います。開発者はプロトコルが剰余類に留まることを主張するプロパティテスト、大きなカウンタを素数法で折りたたむゲームやランキング、各言語で平方乗算を再実装したくないスクリプトパイプラインに組み込みます。完全な合同ツールキットが必要な流れでは因数分解や逆元ツールと組み合わせてください。
活用例
コンテストと宿題の a^b mod m の答えを検証する
生徒と指導者は、巨大な中間値を手計算で掛けたり、2^53 を超えて静かに精度を失う電卓を信頼したりせずに、合同べきを確認できます。
暗号デモとプロトコルの単体テストを種まきする
玩具 RSA、Diffie–Hellman、剰余類のアサーション用に決定的な base^exp mod m ステップが必要なスクリプトは、独自の BigInt べき乗を載せる代わりにこれを呼べます。
大きなカウンタを固定の剰余範囲に折りたたむ
整数をべき乗してから法 m で還元するゲーム、ランキング、シャーディング支援は、浮動小数点の丸め驚きなく正確な余りを得ます。
よくある質問
合同累乗とは何ですか?
底を指数でべき乗し、法 m での余りを取ることであり、base^exponent mod m と書きます。この計算機はその非負余りを result として返します。
負の指数が拒否される理由は?
負の指数は逆数べきを意味し、底と m が互いに素でないときに存在しないことがある逆元を要します。
高速合同累乗計算機はどのように動きますか?
BigInt 上の二進平方乗算を使います。指数の各ビットについて走行中の底を法 m で二乗し、ビットが立っているときに結果へ掛けます。
法が1のときや指数が0のときはどうなりますか?
法が1なら、どの数も余りは0なので結果は常に0です。指数が0なら、法が1より大きい限り、どの底でも結果は1です。たとえば7の0乗を5で割った余りは1になります。
底は負の数でも使えますか?
使えます。負の底は、掛け算を始める前にmを法とする0以上の余りに直してから計算します。そのため結果は常に0からm−1の範囲に収まります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev/modular-exponentiation \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"base":"2","exponent":"10","modulus":"1000"}'const res = await fetch("https://api.kit.forhosting.com/dev/modular-exponentiation", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"base": "2",
"exponent": "10",
"modulus": "1000"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/modular-exponentiation",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"base": "2",
"exponent": "10",
"modulus": "1000"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/modular-exponentiation", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"base":"2","exponent":"10","modulus":"1000"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"base":"2","exponent":"10","modulus":"1000"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/modular-exponentiation", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"base": "2",
"exponent": "10",
"modulus": "1000"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.modular_exponentiation",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
この高速合同累乗計算機は BigInt 上で二進の平方乗算(square-and-multiply)を実行し、中間積を毎ステップ還元し、答えを決定的に保ち、成功したタスクのみ課金する API を呼ぶ前に、同じ純粋コアをブラウザで無料で試せます。
高速合同累乗が計算するもの
法は少なくとも 1 でなければならず、0 や負の法は標準の非負余りを定義しないため、答えを捏造せず invalid_input を返します。
API の呼び出し方と結果の読み方
JavaScript の安全整数範囲を超える値では、そのしきい値以上のすべての整数を正確に表せないため、文字列形式が推奨されます。必須フィールド base、exponent、modulus の三つの JSON 本体を送ってください。それぞれは十進整数の文字列でも JSON の数値でも構いません。base の別名 a、exponent の別名 exp または e または power、modulus の別名 m または mod が受け付けられるので、フォームと手書きクライアントがキーを改名せず一つの契約を共有できます。成功時は base、exponent、modulus を正規化された十進文字列として返し、base^exponent mod modulus の非負余りとして result を追加します。すぐ試せる古典的な検査:base 2、exponent 10、modulus 1000 は result 24;base 3、exponent 5、modulus 13 は 9;base 7、exponent 0、modulus 5 は 1 です。欠落フィールド、非整数、分数、1 未満の法、負の指数、公開されている桁上限を超える値といった検証失敗は invalid_input を返し、プリペイド残高には課金されません。料金は item 単位で成功リクエストあたり定額の $0.002 です。
制限・性能と開発者の利用場面
この能力は base、exponent、modulus それぞれを十進 2048 桁までに制限します。コンテスト問題、宿題、多くの暗号規模デモには十分で、かつ重い多倍長スタックやコンテナを起こさず Worker の純粋 BigInt が対話的に保てる程度に小さくしています。この軽量 parse ツールは、開発ワークフローにおける厳密な合同べきのための共有計算機と API ステップとして意図されています。このエンドポイントはべき乗と還元の問いだけに答え、検索意図を明確に、応答を最小で予測可能に保ちます。
技術的な質問
法が 1 未満のときはどうなりますか?
法は少なくとも 1 でなければなりません。0 や負の法はここで用いる標準の非負余りを定義せず、invalid_input を返します。
高速合同累乗計算機は無料ですか?
ブラウザツールは無料でローカル実行です。API 呼び出しは成功リクエストあたり $0.002 のプリペイド KIT 残高を使い、失敗したタスクは課金されません。