合同累乗計算機
数をべき乗して余りだけを求めます。2の10乗を1000で割った余りは24、3の5乗を13で割った余りは9です。各値は2048桁まで使え、結果は常に正確です。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 底
- 2
- 非負整数の指数
- 10
- 正の整数の法 m
- 1000
- 結果
- 24
合同累乗は一つの問いを明確に答えます。底を指数で上げ m を法として還元した値は何か。その剰余は玩具 RSA デモ、Diffie–Hellman の授業例、競技プログラミング課題、ネイティブ数制限を超える大きな整数をべき乗するあらゆるスクリプトの背骨です。
合同累乗が計算するもの
整数 base・exponent・法 m が与えられたとき、合同累乗は底の指数乗が r と m を法として合同となる、0 から m−1 の範囲の一意な剰余 r を返します。記号では r ≡ base^exponent (mod m) です。素朴な累乗は底を指数回かけてから還元するため巨大な中間値が増え、通常の浮動小数や固定幅整数では失敗します。
高速合同累乗は各乗算の後に還元し、指数ビットを下位から上位へ走査しながら実行中の底を平方するため、仕事量は指数の十進大きさではなくビット長に比例します。m が 1 のときすべての整数は 0 と合同なので結果は常に 0 です。指数が 0 のとき m が 1 より大きければ任意の底に対し結果は 1 で、通常の空積の規約に一致します。
負の底は先に 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 で平方し、ビットが立っていれば結果に掛けます。
どのくらい大きな数まで使えますか?
底、指数、法はそれぞれ2048桁まで使えます。競技プログラミングの問題や宿題、多くの暗号のデモに十分な大きさで、結果は正確かつすばやく得られます。
指数が0や法が1のときはどうなりますか?
指数が0なら、法が1より大きい限り結果は1です。たとえば7の0乗を5で割った余りは1です。法が1のときはどの数も0と合同なので、結果は常に0になります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/numth/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/numth/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/numth/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/numth/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/numth/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": "numth.modular_exponentiation",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_digits | 2048 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
本合同累乗計算機は BigInt 上の二進平方乗算を実行し、答えを正確・決定的に保ち、API 経由で同じコアを呼ぶ前にブラウザで無料で試せます。
合同累乗が計算するもの
法は 1 以上でなければならず、0 や負の法は標準的な非負剰余を定義しないため答えを捏造せず invalid_input を返します。
API の呼び出し方と結果の読み方
必須フィールド base・exponent・modulus を含む JSON 本体を送信してください。それぞれ十進整数文字列または JSON 数でよく、JavaScript の安全整数範囲を超える値では文字列を推奨します。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 未満の modulus、負の指数、公開桁上限を超える値は invalid_input を返し課金されません。料金は成功リクエストごとに定額 $0.002(限界単価ゼロの単位品目)です。
制限・性能・適する場面
本機能は base・exponent・modulus を各 2048 十進桁に制限し、コンテスト問題・課題・多くの暗号規模デモには十分で、重い多倍長スタックを起動せず純粋 Worker BigInt が対話的に保てる規模に抑えます。この軽量 parse ツールは正確な合同べき用の共有計算機および API ステップとして意図されています。完全な合同ツールキットが必要なワークフローでは因数分解や逆元の別ツールと組み合わせ、本エンドポイントは累乗と還元の問いのみに答えて検索意図を明確にし応答を最小に保ちます。
技術的な質問
法が 1 未満だとどうなりますか?
法は少なくとも 1 でなければなりません。0 や負の法はここで用いる標準的な非負剰余を定義せず invalid_input を返します。
合同累乗計算機は無料ですか?
ブラウザツールは無料でローカル実行です。API 呼び出しは成功リクエストごとに $0.002 の前払い KIT 残高を使用し、失敗タスクは課金されません。