3つの平方数の和による表現計算
この3平方和表現計算機は、非負整数を受け取り、n = a² + b² + c² を満たす具体的な整数 a、b、c を求めます。探索前にルジャンドルの3平方定理を適用するため、禁止形 4^a(8b+7) の整数には、無駄な計算を続けず明確なエラーを返します。結果には3つの項、読みやすい等式、検証済みであることを示す値が含まれます。学習、ソフトウェアテスト、厳密な整数論の処理にご利用いただけます。
無料で実行
存在定理から具体的な表現を得られます
ルジャンドルの3平方定理は、非負整数を3つの整数の平方の和として書けるかどうかを完全に判定します。しかし、表現が存在すると分かるだけでは十分でない場合があります。演習、証明、テストデータ、計算による研究では、実際の値が必要になることが多いためです。n を入力すると、計算機は昇順の探索規則に従って決定論的な3要素を返し、直接確認できる等式も示します。0も入力でき、0の項も認められます。表現には必ずしも3つの非零平方が必要ではないためです。たとえば完全平方数は、2つの0を伴う形で返される場合があります。squares 配列に入るのは平方後の値ではなく底です。そのため [1, 2, 3] は 1² + 2² + 3² を意味します。併記される等式が解釈の曖昧さをなくし、検証フィールドは応答前に整数演算を確認したことを示します。同じ入力で繰り返し呼び出すと常に同じ表現が得られるため、再現可能な文書や自動テストにも適しています。
禁止形 4^a(8b+7) を正確に判定します
3つの平方数の和で表せない非負整数は、a と b を非負整数として 4^a(8b+7) と書けるものに限られます。計算機は4の因子を繰り返し取り除き、残った値を8で割った余りを調べて、この条件を確認します。簡約後の値が8を法として7と合同なら表現は存在せず、禁止形であることを明記した無効入力エラーを返します。これは探索のタイムアウトや不確定な結果ではなく、数学的に不可能であるという結論です。簡単な例では、7はそのまま禁止形であり、28は 4 × 7 なので禁止形です。112も4の因子を2回取り除くと禁止形だと分かります。一方、4の因子を含むだけで除外されるわけではなく、簡約した部分が8を法として7である必要があります。最初に定理を確認することで、形式が不正な入力、対応範囲外の大きさ、正しい入力だが解が存在しない整数を明確に区別できます。また、数学的に結論が出ている場合の不要な候補探索も避けられます。
決定論的な結果をプログラムで安全に利用できます
n は JSON 整数または単純な10進整数文字列として送信してください。フォームが文字列を返す場合には文字列入力が便利ですが、正確な意味を保つため、符号、空白、小数点、区切り記号、科学記数法は受け付けません。ブラウザーと API の実行時間を予測可能にするため、入力には公開済みの上限があります。許可された値に対して、アルゴリズムは最初の平方を昇順に調べ、残る2平方問題を互いに反対方向へ動く整数ポインターで解きます。ネットワーク、乱数、時刻、変更可能な共有状態は使用しません。そのため、得られる3要素と検証判断は繰り返し実行しても安定しています。アプリケーションでは squares の3要素を読み取り、ローカル確認が必要なら a² + b² + c² を別途計算してください。等式は表示用です。禁止形の応答は、標準の無効入力エラーで通知される数学的な結果として扱い、再試行しないでください。ブラウザー版と API は同じ純粋な解法を実行します。このページでは無料で利用でき、API リクエストは$0.002です。
活用例
整数論の演習を完成させます
ルジャンドルの定理で表現の存在を確認した後、具体的な平方項を求められます。
決定論的なテストデータを作成します
平方和を検証するソフトウェア向けに、再現可能な3要素と読みやすい等式を生成します。
表現不可能な入力を分類します
禁止される 4^a(8b+7) の数を、明確な数学的エラーによって識別します。
よくある質問
この機能は何を返しますか?
n、3つの平方の底を含む配列、読みやすい等式、検証済みであることを示す値を返します。
すべての非負整数を表現できますか?
いいえ。4^a(8b+7) の形の整数に限り、3つの平方数の和では表せません。
0の項を使用できますか?
はい。この定理は3つの整数の平方を扱い、そのうち1つ以上が0でも構いません。
同じ要求では同じ3要素が返りますか?
はい。探索順序は決定論的で、乱数、ネットワーク情報、現在時刻を使用しません。
API リクエストの料金はいくらですか?
API リクエスト1回の料金は$0.002です。このページのブラウザー計算機は無料でご利用いただけます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/numth/sum-three-squares-rep \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":310}'const res = await fetch("https://api.kit.forhosting.com/numth/sum-three-squares-rep", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": 310
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/sum-three-squares-rep",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": 310
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/sum-three-squares-rep", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":310}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":310}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/sum-three-squares-rep", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"n": 310
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.sum_three_squares_rep",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_n | 10000000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |