ForHosting KIT · 数学

平方差の因数分解:奇数 n を a² − b² で計算

5959は80² − 21²に等しく、この差から因数59と101が分かります。奇数の合成数を入れると、2つの平方、最も近い因数の組、手で確かめられる等式が得られます。ブラウザで無料で使えます。

  • 無料
  • ブラウザで動作
  • 登録不要
  • データは端末の外に出ません
ご利用方法 ウェブAPIメールTelegramアプリ 近日
入力した場合
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からも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。

POSThttps://api.kit.forhosting.com/numth/difference-of-squares-factor

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}'
{
  "n": 5959
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "numth.difference_of_squares_factor",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。

1リクエストあたり$0.002

単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。

max_n1000000000000
HTTPコード意味
401unauthorizedAPIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。
402insufficient_balance残高が不足しています。チャージ後に再度お試しください。
404unknown_type指定されたタスクタイプは存在しません。タイプ名を確認してください。
429rate_limitedリクエストが多すぎます。しばらく待ってから再度お試しください。

非自明な結果とエラーの意味を確認します

また、4の倍数の一部は平方差で表せますが、本エンドポイントは奇数の因数分解専用であるため、契約上すべての偶数を拒否します。n = 81 では最も近い因数の組が 9 × 9 となり、a = 9、b = 0、9² − 0² = 81 が得られます。

探索結果が常に一定になる理由です

ネットワークサービスや素数表を参照せず、時刻や乱数を使わず、リクエスト間で状態も保持しません。同じ入力からは常に同じ JSON が生成されます。

料金はいくらですか?

API は1回 $0.002 です。ブラウザー版は、このページ上でローカルに実行できます。

b は 0 でもよいですか?

はい。n が奇数の合成数かつ完全平方数なら、等しい非自明な因数から b = 0 が得られます。

KITの完全なドキュメントを見る →