整数の順序付き分割をすべて列挙
4には1+1+1+1から4そのものまで8通りの合成があり、このツールはそのすべてを決まった順序で一覧にし、総数も横に表示します。nは1から16まで入力できます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- N
- 4
- 数量
- 8
正の整数 n の順序付き分割(composition)とは、n を正の整数の和として書き表す方法のうち、加数の順序を区別するものです。1+2 と 2+1 は 3 の異なる分割であり、総数は常にちょうど 2 の n 引く 1 乗となります。この機能は 1 つの正の整数 n を受け取り、各分割を順序付き配列として、さらに総数とともに返しますので、再帰的な木構造を手作業で組み立てたり、宿題の確認・テストフィクスチャの生成・分割に近い組合せ論の探究の際に枝を見落とす危険を負ったりする必要がありません。安全に列挙するには大きすぎる値は拒否されます。
順序付き分割とは何か、分割(partition)との違い
数論と組合せ論において、n の分割(composition)とは、和が n になる正の整数の順序付き列のことです。加数の多重集合だけが問題となり 1+2 と 2+1 を同一視する整数分割(partition)とは異なり、composition ではすべての並べ替えを別個の対象として扱います。
任意の n が 1 以上であるとき、composition はちょうど 2 の n 引く 1 乗だけ存在します。各 composition は、n 個の 1 を並べた列で隣り合う単位の間に区切りを置くか置かないかに対応します。教科書では、順序が並び・順位・段階的な割り当てを表す場面で composition を用います。
たとえばスケジュール内の連続するブロックの大きさ、二進文字列の連(run)の長さ、ちょうど n 単位を進む経路上の各ステップの大きさなどです。学生はしばしばこの二つの族を混同します。どちらも「n をどのように和として書けるか」に答えるものの、順序を左から右へ気にかけるのは composition だけだからです。
順序付きの完全な一覧を返すことで、その違いが具体的になります。
一覧の使いどころと費用
典型的な用途には、与えられた n の composition を列挙する学生の答えの検証、順序付きの要素列を受け取る関数のための網羅的なテストケースの生成、完全な一覧を事後フィルタリングして要素サイズを制限した composition を数える組合せ論的恒等式の探究、そして n 単位の予算を順序付きの段階に分割する際の段取りの選択肢の文書化などがあります。
応答を扱いやすく保つため、n は文書化された範囲内に収めてください。count だけが必要なら、小さな n には引き続きこのツールを使え、より大きな理論的作業ではツールの外で閉じた公式 2 の n 引く 1 乗を適用できます。ブラウザー経路はローカルで動作し、アカウントは不要です。
検証に失敗しても残高は消費されません。この契約からずれる可能性があるクライアント側で長さを再計算するのではなく、返された count を列挙された配列の正とみなしてください。
活用例
宿題やコンテストの検証
与えられた n について学生が挙げた composition の順序付き一覧を、正規の完全な列挙と count と照合し、部分的な手書きの木を採点する代わりに用います。
組合せ論の探究と教育デモ
順序が composition を partition からどう区別するかを実演し、返される count が常に 2 の n 引く 1 乗に等しいことを確認します。
よくある質問
整数の順序付き分割をすべて列挙するにはどうすればよいですか?
応答には要素の配列としての compositions と、count が含まれます。
composition と partition の違いは何ですか?
composition は順序を重要なものとして扱います(1+2 は 2+1 と異なります)。partition は順序を無視し、要素の多重集合だけを保持します。
4の合成はいくつありますか?
8通りです。1+1+1+1、1+1+2、1+2+1、1+3、2+1+1、2+2、3+1、4で、2^(n-1)と一致します。手作業の一覧がこれより少なければ漏れがあります。
nはなぜ16までなのですか?
nが1増えるたびに一覧の長さが2倍になり、大きな値では答えが膨大になるためです。16までなら一覧全体を確認できます。個数だけなら2^(n-1)の公式で足ります。
一覧はいつも同じ順序で出ますか?
はい。同じnなら必ず同じ順序の同じ一覧が返ります。最初の部分を小さいものから順に試して組み立てるため、答えを1行ずつ比べられます。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/numth/compositions-list \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":4}'const res = await fetch("https://api.kit.forhosting.com/numth/compositions-list", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": 4
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/compositions-list",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": 4
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/compositions-list", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":4}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":4}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/compositions-list", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"n": 4
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.compositions_list",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
順序付き分割とは何か、分割(partition)との違い
正規化されて並べ替えられた代表ではなく、あらゆる並べ替えが見え、count フィールドは閉じた公式と一致するはずですので、手作業の不完全な列挙をただちに見つけられます。
本機能が composition を列挙する仕組みと拒否する条件
n は 1 以上 16 以下の正の整数です。エンジンは最初の要素を再帰的に展開してすべての composition を構築します。残りの和 r に対して 1 から r までのすべての要素サイズ k を試し、成長中の接頭辞に k を前置または後置し、残りが 0 になるまで続け、その時点で完成した列を記録します。この走査は安定した決定論的な順序を生み出します。応答は n 自身、compositions 配列、そしてその配列の長さに等しい count(有効な n では常に 2 の n 引く 1 乗)を報告します。通常の composition の定義のもとで、0 と負の数は正の整数ではないからです。必須フィールド n を 1 つだけ含む JSON 本体を送信します。同一のリクエストは常に同じ配列の配列を返し、時計・乱数・ネットワーク状態に依存しません。1 未満の値は invalid_input で失敗します。公表された上限を超える値も invalid_input で失敗します。一覧のサイズは n が 1 増えるごとに倍になるため、無制限の列挙は応答サイズと Worker の CPU を爆発させてしまいます。文書化された最大値は、ブラウザーでも API でも完全な列挙を実用的な範囲に保ちます。欠落・非整数・不正な形式の n フィールドも同様に拒否され、課金されることはありません。
一覧の使いどころと費用
小さな n をすばやく目視で確認したいときは無料のブラウザーツールを使い、スクリプト・成績簿・ジェネレーター・研究ノートブックが多数の値を毎回同じように解決しなければならないときは API を呼び出してください。API の利用は、成功した 1 リクエストごとに公表基本料金 $0.002 でプリペイドの KIT 残高から差し引かれます。
連携の活用例
網羅的なテストフィクスチャの生成
小さな n の値を API に与え、予算に和として達する順序付きの正整数列を処理する関数の入力ケースとして、すべての composition を使います。
技術的な質問
なぜ大きな n を拒否するのですか。
composition の数は 2^(n-1) です。公表された最大値を超えると、完全な一覧が 1 リクエストで安全に列挙するには大きすぎるため、呼び出しは invalid_input で失敗します。
整数の順序付き分割の一覧は無料ですか。
ブラウザーウィジェットは無料でローカルに動作します。API 呼び出しは公表基本料金 $0.002 でプリペイドの KIT 残高を使います。無効な入力は課金されません。
同じ n に対して結果は常に同じですか。
はい。アルゴリズムは乱数もタイムスタンプも用いない純粋な再帰的列挙ですので、同一の入力は同一の JSON を生成します。