法 n のすべての原始根
この法 n の全原始根計算機は、整数 n を法とする乗法的単元群の生成元を完全に求め、昇順で返します。まず、その法が原始根を持つ族に属するかを判定し、オイラーの phi 関数を計算して一つの生成元を見つけ、そこから残りをすべて導きます。応答には法、phi の値、原始根の個数、完全な一覧が含まれます。2 未満の値や原始根を持たない法には、空の結果ではなく明確なエラーを返します。同じ決定的な整数演算により、手軽な確認と再現可能な API 自動化を、成功したリクエストごとに $0.002 で利用できます。
無料で実行
原始根の完全な一覧が表すもの
法 n の原始根とは、その累乗によって法 n の可逆な剰余類をすべて生成する剰余です。重要なのは「すべて」という点です。n と互いに素な数でも、真の部分群だけを巡回する場合があるため、単元であることは必要条件ですが十分条件ではありません。この機能は、1 から n−1 までの正の代表のうち、乗法的位数がちょうど phi(n) であるものをすべて返します。たとえば法 14 の単元群には六つの要素がありますが、生成元の完全な集合には二つの剰余が含まれます。応答には n、オイラーの phi、原始根の個数、数値順に並べた primitive_roots 配列が含まれます。原始根が存在する場合、その個数は phi(phi(n)) なので検算にも使えます。特別な法 2 では、唯一の原始根 1 を正しく返します。群全体の生成元がない法は明示的に拒否し、非巡回群を空配列で曖昧にしません。
存在条件と各生成元を検証する方法
原始根はすべての法に存在するわけではありません。分類定理によれば、法 n の乗法群が巡回群になるのは、n が 2、4、奇素数の累乗、または奇素数の累乗の 2 倍である場合に限られます。計算機は n を素因数分解し、探索前にこの構造条件を確認します。許容される法では phi(n) を計算し、その群位数を素因数分解して、候補の単元を高速なモジュラー累乗で検査します。phi(n) の相異なる各素因数 q について、g の phi(n)÷q 乗が法 n で 1 と合同でなければ、候補 g の位数は phi(n) です。一つの g が分かれば、k が phi(n) と互いに素である g の k 乗が原始根のすべてです。実装はそれらの指数を列挙し、剰余を正確に計算して並べ替えます。乱数、外部表、ネットワーク、現在時刻は使わないため、同じ入力から常に同じ数値結果が得られます。
数学学習とソフトウェアでの活用方法
完全な生成元一覧は、最小の原始根だけでは足りない問題に役立ちます。学習者は返された剰余を手計算の累乗表と比較し、生成元の個数が phi(phi(n)) になる理由を確認できます。教員は、有効な答えを一つに限定しない解答集を作成できます。開発者は、乗法的位数を求める処理のテストデータを生成し、列挙コードを検証し、別の用途上の規則によって複数の生成元から選択できます。失敗例も有用で、法 8 や 15 を試すと、可逆な剰余が多くても単元群が巡回群でない合成数があると分かります。要求される応答は完全列挙で根の数が多くなり得るため、入力は 10,000 以下に制限しています。これにより表示、API の応答サイズ、実行時間を予測可能に保ちます。n は整数または単純な十進文字列で指定してください。成功した API リクエストは $0.002 です。不正または非対応の入力には明確な検証エラーを返します。
活用例
整数論の演習を確認する
手計算の結果を、法 n の完全かつ整列済みの生成元集合と比較できます。
決定的なテストデータを作る
乗法的位数や巡回単元群を計算するコード向けに、正確な期待値を作成できます。
巡回群と非巡回群を教える
原始根を持つ法と持たない値を比較し、分類定理を説明できます。
よくある質問
API リクエストの料金はいくらですか?
成功した API リクエストは $0.002 です。無効な入力には根の一覧ではなくエラーを返します。
どの法に原始根がありますか?
2、4、奇素数の累乗、およびその 2 倍だけです。それ以外は単元群が巡回群でないため拒否されます。
互いに素な剰余が原始根でないのはなぜですか?
互いに素であることは単元になる条件にすぎません。原始根には最大の乗法的位数 phi(n) も必要です。
結果には原始根がいくつ含まれますか?
存在する場合、その個数は phi(phi(n)) です。応答では配列とともに計算済みの個数を示します。
n が 10,000 以下に制限されるのはなぜですか?
出力が全生成元を列挙し n とともに増えるためです。この上限によって計算量と応答サイズを予測可能に保ちます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/numth/all-primitive-roots \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":14}'const res = await fetch("https://api.kit.forhosting.com/numth/all-primitive-roots", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": 14
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/all-primitive-roots",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": 14
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/all-primitive-roots", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":14}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":14}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/all-primitive-roots", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"n": 14
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.all_primitive_roots",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_n | 10000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |