二平方和チェッカー
65は1² + 8²と2つの平方数の和で表せますが、3や7は決して表せません。整数を入力すると、判定結果と成り立つ組、フェルマーの定理で使う素因数が分かります。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
非負整数 n が二つの整数の平方の和であるとは、整数 a と b が存在して n が a の二乗と b の二乗の和に等しいことです。零は 0² + 0²、五は 1² + 2²、十三は 2² + 3²、六十五は 1² + 8²(または 4² + 7²)ですが、三と七はその形では書けません。フェルマーの古典的な定理は、素因数分解だけから所属を決めます。n が二平方和になるのは、四を法として三と合同な素数がすべて偶数指数で現れるとき、かつそのときに限ります。算術は完全に決定的で、ネットワークも乱数も時計も使いません。宿題確認、コンテストのオラクル、本番パイプラインが常に一致します。
「二平方の和」の意味とフェルマーの判定
整数 a と b は、a の二乗と b の二乗の和が n に等しいとき、n の表現を成します。符号と順序は根底の恒等式を変えません。(a, b) が成り立てば (±a, ±b) と (±b, ±a) も成り立つため、本チェッカーは表現が存在するとき a が b 以下の非負の対を一つ報告します。
零と一は直ちに成功します(0²+0² と 0²+1²)。二は 1²+1² です。四を法として一と合同な素数はそれ自身が二平方の和であり、四を法として三と合同な素数は決してそうではありません。
定理全体はこれらの事実を掛け合わせます。n を素因数冪の積として書き、ある素数 p ≡ 3 (mod 4) の指数が奇数なら n は阻害され二平方和になり得ません。そのような素数がすべて偶数指数(一つも現れない空の場合を含む)なら n は可能です。
同値に、すべての平方因子と二および素数 ≡ 1 mod 4 の因子を除いたあと、4k+3 型が奇数冪で残ってはいけません。本ツールは標本化も近似もしません。
学習・コンテスト・自動化での二平方和チェックの位置づけ
学生は合同算術、二次剰余、初等的な代数的整数論を学ぶときに二平方の和に出会います。阻害素数 ≡ 3 mod 4 は因数分解とディオファントス表現をつなぐ最初の橋です。教員は五・十三・二十五・六十五が二平方和かどうか尋ねるワークシートの解答を生成し、三・七・十一と対比でき、不透明な電卓アプリに頼る必要がありません。
コンテスト練習と CTF の write-up では「n を a²+b² と書けるか」を素早くオフラインで確かめるオラクルが必要になることが多く、OEIS の断片をハードコードせずに解けます。ライブラリ作者は因数分解ヘルパーやガウス整数のノルムのプロパティテストに同じ契約を使います。
試行除算と任意の表現探索が対話的に保たれるよう n を公開上限内に保ってください。暗号規模の整数には多倍長因数分解が必要で、この軽量 parse 能力では足りません。最初の n 個の平方の和やハッピー数(桁の平方和)の兄弟ランディングは別の検索意図に応えます。
活用例
コンテストと CTF での二平方チェック
表現可能な整数の静的表を埋め込まず、プログラミングコンテストや capture-the-flag の問題で二平方和の所属を素早く検証します。
よくある質問
n が二平方の和になるのはいつですか?
非負整数 n が整数 a, b について a² + b² に等しいのは、n の素因数分解において 3 を法として合同な素数(正確には 4 を法として 3)がすべて偶数指数をもつとき、かつそのときに限ります。零・一・二・五・十三・六十五は成功し、三と七は失敗します。
n が負のときはどうなりますか?
古典的な二平方和の定理は非負整数について述べられており、負の n は定義域外で課金されません。
二平方和チェッカーの料金は?
ブラウザツールは無料でローカル実行です。失敗したタスクは課金されません。
アルゴリズムは乱数的ですか?
いいえ。 試行除算による決定的因数分解、素数 ≡ 3 mod 4 の厳密な偶奇検査、所属が成り立つときの a ≤ b の表現の厳密探索を使います。同じ n は常に同じフラグと factors を返します。
65は2つの平方数の和になりますか?
なります。65は1² + 8²であり、4² + 7²でもあります。素因数は5と13で、どちらも4で割ると1余るため、表現を妨げるものはありません。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/numth/sum-two-squares-check \
-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-check", {
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-check",
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-check", 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-check", 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_check",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
本機能は n を因数分解し、奇数多重度の 4k+3 型の阻害素数を列挙し、明確な is_sum_of_two_squares フラグを返し、答えがはいのときは非負の表現 a ≤ b を一つ付けます。ブラウザで無料に試すか、コンピュータ代数なしで再現可能な可否判定が必要なスクリプトでは成功リクエストあたり $0.002 で API を呼び出してください。
「二平方の和」の意味とフェルマーの判定
試行除算で一度だけ n を因数分解し、各素冪を 4k+3 の奇数指数条件で走査し、答えがいいえのとき blocking_primes を埋め、基準がはいのときだけ具体的な対 a²+b² を探し、教科書の所属とブール値が常に一致します。
入力契約、応答の形、エラーの扱い
n は零以上かつ一兆(十の十二乗)以下の整数です。負の n は定義域外です。古典的な主張は非負整数についてであり、偽の成功を捏造せず明確なメッセージで示します。エラーは定義域違反だけなので、三・七・二十一を提出する採点スクリプトが単純になります。必須フィールド n だけを含む JSON 本体を送ってください。同じフィールドの別名 number と value も受け付けるので、フォームとクエリ文字列が一つの契約を共有できます。成功時の応答には、受理した n、ブールの is_sum_of_two_squares、prime と exponent を持つ factors の順序付きリスト(零と一では空)、奇数指数の素数 ≡ 3 mod 4 の昇順リスト blocking_primes、フェルマーの規則を短く言い換えた criterion、ブールが真のときは a² + b² が n に等しく a ≤ b となる非負整数 a と b を持つ representation オブジェクトが含まれます。n 欠落・非整数・分数・負の値・公開上限超過といった検証失敗は invalid_input を返し、課金されません。料金は成功リクエストあたり定額の $0.002 です(単位 item、限界単価ゼロ)。基準に失敗する整数でも is_sum_of_two_squares false と空でない blocking_primes の成功応答が返ります。
学習・コンテスト・自動化での二平方和チェックの位置づけ
このページでは作業はすべてブラウザ内で走り、API では成功した照会ごとに $0.002 がかかり、検証失敗は課金されず、応答後に何も保存されません。本ページはフェルマーの二平方所属判定と明確な is_sum_of_two_squares フラグを求める方を対象とします。
連携の活用例
宿題: n を a² + b² と書けるか
生徒に整数を与え、手計算の因数分解と可否判定を、阻害素数付きの決定的 API または無料ブラウザ結果と照合します。
フェルマーの 4k+3 判定基準を教える
素数 ≡ 1 mod 4 や 65 のような積は成功し、奇数指数の素数 ≡ 3 mod 4(3, 7, 11, 21)は失敗することを、factors と blocking_primes を黒板に示して説明します。
技術的な質問
偽の答えでも factors は返りますか?
はい。表現不能な整数は is_sum_of_two_squares false、完全な factors 一覧、奇数指数の各素数 ≡ 3 mod 4 を名指しする blocking_primes 付きで成功します。エラーは定義域違反だけです。