平方差の因数分解:奇数 n を a² − b² で計算
5959は80² − 21²に等しく、この差から因数59と101が分かります。奇数の合成数を入れると、2つの平方、最も近い因数の組、手で確かめられる等式が得られます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- N
- 5,959
- A
- 80
- B
- 21
- 小さい方の因数
- 59
- 大きい方の因数
- 101
平方差による因数分解計算では、正の奇数の合成数を入力すると、a の平方から b の平方を引いた値が元の数になる整数 a と b を求めます。a² − b² は常に (a − b)(a + b) と等しいため、対応する非自明な因数も返します。探索は平方根の近くから始めるので、得られる因数同士は可能な限り近くなり、b は最小になります。偶数、素数、1については、役に立たない 1 × n という自明な分解を返さず、明確な入力エラーを表示します。
奇数を二つの平方で表します
代数恒等式 a² − b² = (a − b)(a + b) は、平方の差と整数の因数分解を結び付けます。n が奇数の合成数なら、非自明な因数の組は必ず二つの奇数から成ります。その因数を d と q(d ≤ q)とすると、a = (q + d) / 2、b = (q − d) / 2 です。
二つの奇数の和と差はいずれも偶数なので、a と b は整数になります。この計算機は、まず n の平方根に近い約数を見つけ、正確な除算で対になる因数を求めてから、二つの式を適用します。たとえば 5959 の因数の組は 59 × 101 です。
半和は 80、半差は 21 なので、80² − 21² = 6400 − 441 = 5959 となります。結果には n、a、b、二つの因数、読みやすい恒等式が含まれます。因数を掛けるか平方を引けば確認できるため、単なる計算結果としてだけでなく、簡潔な証明としてもご利用いただけます。
非自明な結果とエラーの意味を確認します
正の奇数は、因数の組 1 × n を許せば、形式上はすべて平方差で表せます。その場合、a は (n + 1) / 2、b は (n − 1) / 2 です。しかし、この表現では有用な因数が得られないため、本機能では意図的に除外しています。
成功するには、両方の因数が1より大きい非自明な分解が必要です。そのため、奇数の素数と 1 を入力すると、非自明な分解がないことを示す入力エラーになります。一方、奇数の完全平方数は有効です。
入力は公開された上限以内の正の有限整数でなければなりません。小数、負数、不正な文字列、上限を超える値は、丸めたり近似したりせずに拒否します。
探索結果が常に一定になる理由です
実装は √n 以下で最大の奇数から開始し、奇数の候補を降順に調べます。最初に見つかる正確な約数は平方根以下で最大の因数であり、対になる因数は平方根以上で最小です。したがって、最も近い非自明な因数の組が得られ、b の非負の値も最小になります。
ループには固定された下限があり、宣言済みの最大入力によって処理量も制限されるため、無限に続くことはありません。対応範囲では安全な整数演算だけを用い、正確に計算します。巨大整数向けの汎用因数分解ではなく試し割りですが、範囲を限定することでブラウザーやエッジでも実用的に動作します。
また、明示的なエラーにより、素数の 1 × n を意味のある因数分解として扱うことを防ぎます。
活用例
代数の問題を検算します
提示された n = a² − b² を確認し、その恒等式から得られる因数の組を表示します。
因数分解の恒等式を説明します
二つの奇数因数から、a と b に使う半和と半差がどのように得られるかを示します。
釣り合った因数の組を求めます
√n に最も近い非自明な因数を返し、b の非負の値も最小にします。
よくある質問
偶数が拒否されるのはなぜですか?
本機能は奇数のみを対象とします。一部の偶数は平方差になりますが、この因数分解処理の対象外です。
素数でエラーになるのはなぜですか?
素数の正の因数の組は 1 × n だけです。本機能では両方が1より大きい非自明な分解を必要とします。
複数の分解がある場合はどれを返しますか?
√n に最も近い因数の組を返すため、b は最小の非負値になります。
5959を2つの平方の差で表すには?
因数59と101から始めます。和の半分は80、差の半分は21なので、80² − 21² = 6400 − 441 = 5959となります。
81のような奇数の平方数でも使えますか?
はい。81の最も近い因数の組は9と9で、9² − 0² = 81となるため、平方は9²と0²になります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/numth/difference-of-squares-factor \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":5959}'const res = await fetch("https://api.kit.forhosting.com/numth/difference-of-squares-factor", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": 5959
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/difference-of-squares-factor",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": 5959
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/difference-of-squares-factor", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":5959}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":5959}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/difference-of-squares-factor", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"n": 5959
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.difference_of_squares_factor",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
非自明な結果とエラーの意味を確認します
また、4の倍数の一部は平方差で表せますが、本エンドポイントは奇数の因数分解専用であるため、契約上すべての偶数を拒否します。n = 81 では最も近い因数の組が 9 × 9 となり、a = 9、b = 0、9² − 0² = 81 が得られます。
探索結果が常に一定になる理由です
ネットワークサービスや素数表を参照せず、時刻や乱数を使わず、リクエスト間で状態も保持しません。同じ入力からは常に同じ JSON が生成されます。
技術的な質問
料金はいくらですか?
API は1回 $0.002 です。ブラウザー版は、このページ上でローカルに実行できます。
b は 0 でもよいですか?
はい。n が奇数の合成数かつ完全平方数なら、等しい非自明な因数から b = 0 が得られます。