二平方和の表現数
二平方和の表現数計算は、x² + y² = n を満たす順序付き整数対 (x, y) の正確な個数 r₂(n) を返します。順序と符号を区別するため、(1, 2)、(2, 1)、(-1, 2)、およびその他の符号違いは別々の表現です。公開されている上限内の非負整数を入力すると、考えられる座標対を一つずつ列挙せず、素因数分解に基づく決定的な個数が得られます。結果は数式での計算や自動検証にそのままご利用いただけます。
無料で実行
順序付き表現数が示すもの
この計算機は、x² + y² = n を満たす整数対 (x, y) がいくつあるかという、数論上の明確な問いに答えます。ここでは 順序付き であることが重要です。x と y が異なる場合、両者を入れ替えると別の表現になります。また、座標が 0 でない限り、符号の違いも個別に数えます。そのため、ある象限にある一つの幾何学的な点は、円周上で符号の異なる複数の点に対応し、それらすべてが集計対象になります。軸上の点も含まれるので、完全平方数には (a, 0)、(-a, 0)、(0, a)、(0, -a) のような表現があります。特別な値 n = 0 の表現は (0, 0) だけで、個数は 1 です。返される r_two フィールドは標準的な記号 r₂(n) に対応します。座標対の一覧ではなく個数を返すため、表現が多数ある n にも扱いやすい形式です。入力には非負整数が必要です。小数、安全に扱えない整数、負数、宣言済み上限を超える値は、丸めたり暗黙に読み替えたりせず拒否されます。
r₂(n) の計算方法
アルゴリズムは n を素因数分解し、二平方和の表現数に関する古典的な定理を適用します。正の n について、r₂(n) は、4 を法として 1 に合同な約数の個数から 3 に合同な約数の個数を引いた値の 4 倍です。これと同値な素因数表示を使うと、より効率よく評価できます。4 を法として 3 に合同な素数が奇数の指数で現れる場合、表現数は 0 です。それ以外では、4 を法として 1 に合同な各素因数について「指数 + 1」を掛け合わせ、最後にその積を 4 倍します。2 のべきはこの積を変えません。例として n = 65 = 5 × 13 を考えます。どちらの素数も 4 を法として 1 で、指数はそれぞれ 1 なので、r₂(65) = 4 × 2 × 2 = 16 です。実装では決定的な整数除算だけを行い、座標格子の総当たり、外部サービスへの接続、確率的素数判定は使用しません。宣言された最大値によって試し割りの処理量が制限され、受理した整数について正確な結果を保ちます。
結果を正しく利用する方法
標準的な数論公式、格子点問題、テータ級数の係数計算で使われる、符号と順序をすべて区別した個数が必要な場合は r_two をご利用ください。これは、二つの非負平方数への本質的に異なる分解の個数とは一致しません。0 ≤ x ≤ y を満たす組合せだけが必要な場合は、対称性を別途考慮する必要があります。異なる二つの非零座標を持つ対は、符号付き順序対として 8 個に対応します。軸上の対は 4 個、等しい非零座標を持つ対も 4 個に対応します。この軌道の大きさにより、正の r₂(n) が通常 4 の倍数になる理由を説明できます。n = 0 だけは原点しかないため例外です。表現が存在しない場合、この機能は正常な結果として 0 を返します。入力エラーではありません。自動処理では n フィールドに整数を送り、応答の r_two フィールドをお読みください。API リクエスト 1 回の料金は $0.002 で、ブラウザー版でも同じ純粋な計算を実行します。再現可能な記録には n と r_two を一緒に保存してください。
活用例
数論問題の解答を確認する
素因数分解や約数に基づく議論から求めた、符号付き順序表現数を検算できます。
円周上の格子点を数える
正方格子を総当たりせず、x² + y² = n 上にある整数座標の点数を求められます。
数列データを作成する
実験、テスト、テータ級数の係数に用いる選択した整数の r₂(n) を正確に計算できます。
よくある質問
(x, y) と (y, x) は別々に数えますか?
はい。順序付きの対を数えるため、x と y が等しい場合を除き、座標の入れ替えは別の対になります。
負の座標も数に含まれますか?
はい。方程式を満たす符号付き整数対はすべて含まれます。
r₂(0) はいくつですか?
1 です。平方の和が 0 になる順序付き整数対は (0, 0) だけです。
結果が 0 になるのはなぜですか?
素因数分解で 4 を法として 3 に合同な素数の指数が奇数なら、その正整数は二平方和で表せません。
実際の座標対も返されますか?
いいえ。座標を列挙する代わりに素因数分解を使い、正確な個数 r_two だけを返します。
API リクエストの料金はいくらですか?
1 回あたり $0.002 です。この計算はブラウザーでもご利用いただけます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/numth/sum-two-squares-count \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":65}'const res = await fetch("https://api.kit.forhosting.com/numth/sum-two-squares-count", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": 65
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/sum-two-squares-count",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": 65
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/sum-two-squares-count", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":65}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":65}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/sum-two-squares-count", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"n": 65
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.sum_two_squares_count",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_n | 1000000000000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |