積の法則(数え上げの基本原理)計算機
シャツ3枚、ズボン4本、靴2足の組み合わせは24通りです。各段階の選択肢の数を入力すると、答えが何百桁になっても正確な組み合わせの総数が分かります。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 段数
- 3, 4, 2
- 合計
- 24
- 段数
- 3
- カウント
- 3, 4, 2
- 桁
- 2
積の法則——数え上げの基本原理とも呼ばれます——とは、ある過程がいくつかの段階で進み、各段階で選択肢の数が決まっている場合、起こりうる結果の総数はそれらの数の積に等しいという法則です。シャツ3枚、ズボン4本、靴2足なら 3 × 4 × 2 = 24 通りの組み合わせになります。多倍長整数演算を使うため、結果が数百桁になっても精度は失われません。
積の法則が実際に述べていること
複数の独立したステップで行う決定を想像してみてください。最初のステップでは c1 個の選択肢から1つを選び、何を選んだとしても2番目のステップでは c2 個、3番目では c3 個の選択肢があり、以下同様に続きます。数え上げの基本原理は、すべてのステップを通る完全で互いに異なる経路の総数が c1 × c2 × … × ck であることを示します。
前菜4種、主菜6種、デザート3種のメニューなら、4 × 6 × 3 = 72 通りの三品コースができます。重要な前提は、各段階の選択肢の数が以前の選択に依存しないことです。決定木の各枝は、同じ段階では同じ分岐数を持ちます。
この前提が成り立つ限り、木を描く必要はありません。1回の掛け算で総数が求まります。
非常に大きな数のための正確な演算
積は急速に大きくなります。だからこそ数え上げの問題は列挙ではなく掛け算で解くのです。10段階それぞれに10通りの選択肢があるだけで100億通りの結果になり、パスワード、ナンバープレート、製品バリエーション、座席配置といった現実的な組み合わせ空間は、64ビット浮動小数点数で正確に表せる範囲を日常的に超えます。
JavaScriptの数値は 2^53 を超えると暗黙に精度を失い、26^10 のような総数を壊してしまいます。この計算機は任意精度の多倍長整数で積全体を計算するため、応答のすべての桁が正確であり、クライアント側の数値型が受信時に値を損なわないよう、合計を十進文字列として返します。実用上の上限は無限ではなく十分な広さです。
最大1000段階、各段階の数は最大10億まで対応します。
入力の検証と出力の読み方
各段階の数は正の整数でなければなりません。ゼロは拒否されます。 選択肢がゼロの段階は過程全体を不可能にし、暗黙にゼロを返せばモデル化の誤りを隠してしまうからです。分数、負の数、数値でない文字列も同様に拒否されます。
入力が有効な場合、応答は正規化された各段階の数をそのまま返し、何段階を掛けたかを示し、合計を十進文字列とその桁数とともに返します。このページのブラウザツールで対話的に試してください。数値は計算された後、破棄されます。
活用例
メニューや製品の組み合わせ数を数える
サイズ、色、仕上げなどカテゴリごとの選択肢を掛けて、カタログに実際に何種類のバリエーションがあるかを把握します。
パスワードやコードの空間を見積もる
6桁のPINなら 10^6、8文字のコードなら 26^8 を計算し、セキュリティレビューで総当たり攻撃への耐性を検討します。
数学の授業用の問題を生成する
授業スクリプトからランダムな段階の数を入力し、手計算なしで積の法則の問題の正確な解答を得ます。
よくある質問
数え上げの基本原理とは何ですか?
各段階に c1, c2, ..., ck 個の選択肢がある過程では、結果の総数が積 c1 × c2 × … × ck に等しいという法則です。
なぜ段階の数にゼロは拒否されるのですか?
選択肢ゼロの段階は、完全な結果が存在しないことを意味します。暗黙のゼロではなくエラーを返すことで、ほぼ常にモデル化の誤りである問題を明らかにします。
結果はどれくらい大きくなりますか?
上限の範囲内で任意に大きくなります。最大1000段階、各段階は最大1000000000までです。合計は多倍長整数で計算され、正確な十進文字列として返されます。
入力は保存されますか?
いいえ。 各段階の数はメモリ上で掛け算された後に破棄され、結果だけが返されます。
積の法則が使えるのはどんなときですか?
前の段階で何を選んでも、次の段階の選択肢の数が変わらないときです。この条件が成り立てば樹形図を描く必要はなく、前菜4品、主菜6品、デザート3品なら4×6×3で72通りと、掛け算だけで総数が出ます。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/math/fundamental-counting-principle \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"stages":[3,4,2]}'const res = await fetch("https://api.kit.forhosting.com/math/fundamental-counting-principle", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"stages": [
3,
4,
2
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/fundamental-counting-principle",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"stages": [
3,
4,
2
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/fundamental-counting-principle", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"stages":[3,4,2]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"stages":[3,4,2]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/fundamental-counting-principle", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"stages": [
3,
4,
2
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.fundamental_counting_principle",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_stages | 1000 |
max_count | 1000000000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
このAPIは各段階の選択肢の数を配列として受け取り、その積を正確に返します。
積の法則が実際に述べていること
このエンドポイントはまさにその法則を実装したもので、段階ごとの選択肢の数を配列として送ると、正確な積とともに段階数と結果の桁数が返され、桁の規模を一目で確認できます。
非常に大きな数のための正確な演算
教科書のすべての練習問題と、スクリプトで扱う現実的な組み合わせ空間を網羅しつつ、無料のブラウザ版は即座に動き、APIのコストも抑えられています。
入力の検証と出力の読み方
検証に失敗すると、APIは問題の正確な位置(例:stages[2])を示す invalid_input エラーを返すため、呼び出し側のスクリプトが問題を直接表示できます。APIとまったく同じコードが動いています。総数を授業ジェネレーターや在庫システム、テストスイートに組み込む必要がある場合はAPIをご利用ください。APIの1リクエストの料金は $0.002 で、データは保存されません。
技術的な質問
料金はいくらですか?
API経由で1リクエストあたり $0.002 です。このページのブラウザでも無料で実行できます。同じコードが両方を支えています。