握手問題計算
全員が他の全員と1回ずつ握手したときの回数を求めます。5人なら10回、4人なら6回で、10回という合計から5人と逆算することもできます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 人数
- 5
- 計算モード
- forward
- 握手回数
- 10
- 最大n
- 1,000,000
この握手問題計算は、組み合わせ論の古典的な問いに答えます。n人が集まり、すべてのペアがちょうど1回ずつ握手するとき、握手は何回行われるか。閉じた式はnC2、すなわちC(n, 2) = n(n − 1)/2で表され、これはグラフ理論において完全グラフK_nの辺の数として現れる三角数と同じものです。本ツールは逆算も行います。ちょうどC(n, 2)の値である握手の合計が与えられたとき、唯一の非負整数の人数nを復元します。すでにご存知の簡単な例として、5人なら握手10回、4人なら6回、0人または1人なら0回になります。エンジンは決定的なBigInt演算のみを使用します。ネットワーク呼び出しもサンプリングも日付依存のショートカットもありません。宿題やコーディング演習にはブラウザで無料でお使いいただけます。
握手問題が数えるものと結果の見方
握手問題は、二項係数C(n, 2)の背後にある日常的な物語です。それぞれの握手は2人の順序を問わない組み合わせなので、合計はn人から重複なく順序を問わずに2人を選ぶ方法の数、つまりnに(n−1)を掛けて2で割った値そのものです。これは、人を一列に並べて各人をそれより後ろにいる全員とペアにすれば二重に数えずに済むことからも理解できます。
同じ整数は、n個の頂点を持つ完全グラフの辺の数であり、ゼロから慎重に添字を振った場合の(n−1)番目の三角数であり、離散数学の講義における定番の準備運動でもあります。
この計算は、forwardまたはinverseのモードフラグ、人数n、10進数の文字列としての正確な握手の合計、C(5, 2) = 5*(5-1)/2のような短い式の文字列、そしてクライアントが送信前に検証できるよう公開された最大のnを返します。真実として提示される近似的な浮動小数点の経路や、ペアのランダムなサンプリングは一切ありません。
拒否される場合には、nとhandshakesの両方が欠落している、整数でない、分数、指数表記、公開された上限を超える値、負のn、負の握手合計、そしてちょうどどのC(n, 2)にも一致しない握手合計が含まれます。負のnを拒否するのは意図的な仕様です。
kを自由に選べる通常の組み合わせ、順列、または重複を許す多重集合の組み合わせが必要な場合は、それぞれ専用のツールをお使いください。このページは握手の回数とその正確な逆算のみに答えます。
握手数が活きる学習・コード・モデリングの場面
生徒は、教科書が組み合わせを紹介するとき、総当たり戦のトーナメントに何試合必要かを教師が尋ねるとき、あるいはグラフ理論で完全グラフK_nが初めて定義されるときに握手問題に出会います。教師は、大きな整数を丸めたり黙って指数表記に切り替えたりする不透明な電卓アプリを信用せずに、手頃なnに対する解答例を事前に生成できます。
開発者は、決定的なテストベクトルの種を作るため、ペアごとの比較処理の規模を見積もるため、あるいは浮動小数点の近似値ではなく正確なC(n, 2)の値を要求するプログラミング課題の条件を満たすために、スクリプトから同じ契約を呼び出します。
競技プログラミングの練習では、時間制限の中でOEISの表をダウンロードせずに解答を検証できる、高速でオフラインの三角握手ランクの情報源がしばしば必要になります。プロダクトやオペレーションの分析者は、n人の参加者の間で全ペアが1回ずつやり取りした場合に生じる1対1のミーティング数や、重複のない無向辺の数を見積もる際にこの回数を使います。
逆算の経路も同様に有用です。全ペアを網羅したと主張する報告済みのミーティング合計から、nを復元し、その数値が組み合わせ論的に成立可能かどうかをダッシュボードに反映する前に検証できます。このページ上ではすべての処理がブラウザ内で完結します。
活用例
宿題と組み合わせ論の確認
教科書の演習や小テストのために、正確なC(n, 2)の握手合計を調べたり、三角数の握手回数を逆算したりします。
決定的なテストフィクスチャ
表を手作業で維持することなく、単体テストやプロパティテスト、CIのアサーションのために再現可能な10進数の握手回数の文字列を生成します。
総当たり戦とペアごとの規模見積もり
トーナメントやミーティング計画、完全グラフの辺数の見積もりのために、n人の参加者間の無向ペアを数えます。
よくある質問
握手回数はどのように定義されますか?
n人の間ですべてのペアが1回ずつ握手する場合、合計はC(n, 2) = n(n − 1)/2です。
握手の合計からnを復元できますか?
はい。 handshake(またはh、count)を指定してください。その合計は正確などれかのC(n, 2)と一致する必要があります。
結果が数値ではなく文字列なのはなぜですか?
握手の合計は二次関数的に増加するため、nが大きい場合にJavaScriptの安全な整数の範囲を超えることがあります。
何人まで計算できますか?
最大で百万人まで計算できます。握手の回数は人数のおよそ2乗に比例して増えますが、その規模でも結果は正確なままです。
どの人数にも当てはまらない握手の合計を入れるとどうなりますか?
その合計は受け付けられず、エラーとして知らされます。逆算できるのは、ある人数の全員が1回ずつ握手したときの合計と一致する値だけで、たとえば10回なら5人になります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/combo/handshake \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":5}'const res = await fetch("https://api.kit.forhosting.com/combo/handshake", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": 5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/combo/handshake",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": 5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/combo/handshake", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/combo/handshake", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"n": 5
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "combo.handshake",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_n | 1000000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
負の人数はinvalid_inputとして拒否されるため、不正なスプレッドシートのセルが黙って誤った答えになることはありません。CIや授業のデモで再現可能な握手のフィクスチャが必要な場合は、リクエストが成功するごとに$0.002でAPIをお使いください。
握手問題が数えるものとレスポンスの内容
エンジンは対応範囲内でBigIntを使い正確な積を構築するか、invalid_inputで入力を拒否します。
nとhandshakesの読み取り方と三角数の逆算(平方根)の仕組み
非負の値には任意で先頭に正符号を付けられます。埋め込まれた空白、16進数の接頭辞、指数表記は明確なメッセージとともに拒否されるため、不正なセルが誤った回数になることはありません。nが0または1の場合は有効な入力で、それぞれ空の完全グラフと単一頂点のグラフに対応して握手0回を返します。エンジンはnの上限を100万に固定しており、三角数は二次関数的に増加するにもかかわらず、無料のブラウザ経路とエッジのWorkerの両方でメモリと遅延を予測可能な範囲に収めています。inverseモードは、1に8hを加えた判別式が整数の平方根で完全平方数かどうかを検証することで、二次方程式n二乗引くnマイナス2h等しいゼロを解きます。優先されるフィールドは人数を表すnと、逆算する合計を表すhandshakesですが、nにはpeopleやpersons、handshakesにはhやcountという別名も受け付けるため、スプレッドシートやクエリ文字列、型付きフォームで同じ契約を再利用できます。forwardモードはnと(n−1)をBigIntで掛け合わせて2で割るため、IEEEの倍精度浮動小数点数が53ビットを超えたところで桁を失うようなことは起こりません。完全平方数であり、得られたnが範囲内の整数であればそのnを返し、そうでなければ握手の合計が正確な値ではないことをinvalid_inputで説明します。両方のフィールドが指定された場合、エンジンは整合性を確認し、一致しないペアは一方を黙って採用するのではなく明示的に失敗します。すべての中間値はBigIntであり、最終的な握手数はtoStringでシリアライズされるため、JSONで大きな値が切り捨てられることはありません。三角数の平方根を自分で再実装せずに自動パイプライン内で同一の数学的結果が必要な場合は、このページの無料ブラウザ実行と有料APIを組み合わせてください。
握手数が活きる学習・コード・モデリングの場面
APIでは成功した照会1件ごとに$0.002が課金され、検証に失敗した場合は課金されず、レスポンスを返した後は何も保存されません。この無料の対話的な検証と同一結果を返す有料APIという組み合わせは、KITのtier-Aカタログ全体の方針と一致しており、教室でのデモから自動パイプラインへ、数学的な結果を変えることなく移行できます。関連する係数が必要な場合は二項係数や重複組み合わせのツールと、手順の順序が重要な場合は格子経路のカウンターと、そして無料で決定的な組み合わせ論のツール群を構築する際には他の数学系エンドポイントと組み合わせてください。
技術的な質問
握手問題計算の料金は?
このページではブラウザ上で無料です。APIでは成功したリクエストごとに$0.002が課金され、無効な入力には課金されません。
nが負の場合はどうなりますか?
負の人数はinvalid_inputとして拒否されます。握手問題ではn ≥ 0が必要です。