ウェアリング問題の表現
平方数で表すと、30は収まる最大の平方を順に取って25 + 4 + 1、つまり5² + 2² + 1²になります。数と2以上の指数を選ぶと、各項と元の数に一致する和が分かります。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- N
- 30
- K
- 2
- 基数
- 5, 2, 1
- 項数
- 3
- Sum
- 30
- 表現
- 5^2 + 2^2 + 1^2
ウェアリングの古典的な問いは、あらゆる自然数が非負整数の k 乗の和として書けるかを扱います。本機能は標準的な貪欲構成を実装します。非負整数 n と 2 以上の指数 k を与えると、残りを超えない最大の完全 k 乗を繰り返し減算し、残りが尽きるまで続けます。整列された底の一覧、各項の値、表示用文字列、成功時に n と等しい和が返ります。制限により n と k は多重精度なしのエッジワーカー向け安全整数演算の範囲に収まります。
ウェアリング型の貪欲表現が意味すること
k 乗とは、非負整数 m と固定指数 k について m を k 乗した整数です。数論におけるウェアリング問題は、あらゆる自然数が高々 g(k) 個のそのような冪の和になる最小の g(k) を研究します。有名な定理では g(2) は 4(ラグランジュの四平方定理)であり、より大きな k には明示的な上界があります。
教科書やプログラミング競技で使う透明な貪欲法を適用します。残り r が正の間、m の k 乗が r 以下となる最大の m を選び、その底を記録し、r を r から m の k 乗を引いた値に置き換えます。1 の k 乗は k が 1 以上なら常に 1 なので、あらゆる非負整数は有限の貪欲展開を持ち、ループは和が n と等しくなって終了します。
貪欲展開は常に最短とは限りません。立方数としての 23 は、貪欲が 2 の立方を 2 回と 1 を 7 回使う一方、より少ない立方で書ける古典例です。しかし手順としては一意で完全に決定的であり、項ごとに監査しやすいです。
0 は空和として表示文字列 zero で表します。完全冪は単一項に潰れます。k が 2 のとき 100 は 10 の 2 乗だけになります。
入力する値と返ってくる結果
n は 0 から 10 億までの非負の対象、k は最小 2・最大 40 の指数です。整数の k 乗根は整数乗算上の検証付き二分探索で求め、浮動小数の Math.pow は種に過ぎず唯一の権威にはしません。極端な残りが 1 を積み上げた場合に備え 1 万項の上限が応答サイズを守ります。
公開された n 上限ではそのガードは安全帯であり常用経路ではありません。例:n が 30、k が 2 のとき bases は 5・2・1、文字列は 5 の 2 乗たす 2 の 2 乗たす 1 の 2 乗です。
活用例
授業でのウェアリング実演
任意の n について貪欲が平方や立方の和を組み立てる様子を、各底と値を黒板用に列挙して学生に示します。
コンテストと LMS のオラクル
任意の有効な k 乗展開を受け付けるプログラミング課題を、この決定的な貪欲参照と照合して採点します。
よくある質問
貪欲展開は常に最短ですか?
いいえ。 貪欲は手順として一意で和としては常に正しいですが、より短い展開が存在することがあります(一部の立方など)。
30を平方数の和で表すとどうなりますか?
30以下で最大の平方は25で、残りは5です。次に4が入って1が残り、最後に1です。30 = 5² + 2² + 1²となり、3つの項の和は30に戻ります。
入力した数がちょうどべき乗の場合はどうなりますか?
1つの項だけになります。平方数なら100はそのまま10²です。収まる最大の平方が数全体と等しく、何も残らないからです。
0を入力すると結果はどうなりますか?
0は空の和として、単に0と表示されます。引くべきべき乗がないため項の一覧は空になりますが、合計は入力と一致します。
平方数はいくつあれば足りますか?
ラグランジュの四平方定理により、どの自然数も4つ以下の平方数の和で表せます。ただし、この順に取る方法ではそれより多くの項になる場合があります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/numth/waring-representation \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":30,"k":2}'const res = await fetch("https://api.kit.forhosting.com/numth/waring-representation", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": 30,
"k": 2
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/waring-representation",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": 30,
"k": 2
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/waring-representation", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":30,"k":2}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":30,"k":2}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/waring-representation", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"n": 30,
"k": 2
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.waring_representation",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_n | 1000000000 |
max_k | 40 |
max_terms | 10000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
2 未満の冪は invalid_input で拒否し、1 乗を 1 の自明な和として黙って扱うことはありません。
ウェアリング型の貪欲表現が意味すること
本エンドポイントは最短表現を探索したり g(k) を証明したりはしません。
入力契約、応答フィールド、検証
必須の整数 2 つを含む JSON 本体を POST してください。利便性のため n の別名 number と k の別名 power を受け付けます。欠落、非整数、分数、負の n、2 未満の k、公開上限超過は invalid_input で問題を示して失敗し、課金されません。成功時は n と k をエコーし、貪欲が生成した順(非増加)の bases を列挙し、base・power・value を持つ terms オブジェクトに展開し、term_count と sum(常に n と等しい)を報告し、各 base caret power をプラスでつないだ可読な representation 文字列を組み立てます。短い formula フィールドは貪欲規則を再述し、UI が散文を捏造しないようにします。
冪の貪欲和 API が役立つ場面
数論の授業やオリンピック準備では、抽象的なウェアリングの議論を手計算で確かめられる具体的な底に変えるライブのオラクルが必要です。n と k を文書化された制限内に保ち、テストで representation と bases を固定すれば、宿題・LMS プラグイン・エッジワーカー向けに再現可能なウェアリング型展開が得られ、独自の数式処理基盤は不要です。コーディング平台では任意の有効な展開を求める問題の参照解として同じ貪欲ループを使い、小さな parse API なら多重精度や CAS を採点器に載せなくて済みます。貪欲長と既知の g(k) 上界を比べる研究ノートは、API 経由で多くの (n, k) 対をバッチし、言語ごとに根の実装をやり直さずに term_count を記録できます。実装は純粋な parse の tier A のため、成功した呼び出しはモデルトークンも外向きネットもなく公開の基本料金 $0.002 で済み、無効入力は残高を消費しません。
連携の活用例
最短長研究のベースライン
貪欲が最適ウェアリング長からどれだけ離れるかを探るとき、既知の g(k) 上界に対し term_count を一括記録します。
技術的な質問
ウェアリング問題の表現計算機はどのように動きますか?
非負整数 n と指数 k >= 2 を送ってください。API は残りに収まる最大の m^k を繰り返し減算し、bases・terms・term_count・sum・表示文字列を返します。
なぜ k は 2 以上でなければなりませんか?
k 乗に関するウェアリング型の問いでは平方(k=2)から始まります。1 乗は n を 1 に分割するだけです。2 未満の k は invalid_input で拒否され課金されません。
応答には何が含まれますか?
エコーされた n と k、貪欲順の bases、base/power/value 付き terms、term_count、n に等しい sum、representation 文字列、短い formula ラベルです。
ウェアリング表現ツールの料金は?
ブラウザツールは無料です。API リクエストは成功呼び出しごとに前払い KIT 残高から $0.002 です。無効入力は課金されません。