排列组合计算器
输入总数 n 与选取个数 k,得到组合数 C(n,k)、排列数 P(n,k)、可重复排列 n^k 与阶乘结果,并列出每个结果对应的公式。
「从 52 张牌里抽 5 张,能有多少种组合」——这类问题用常识数不过来,用对公式却只要一行算式。困难从来不在算,而在分清手里的题该用 C 还是 P:不看先后顺序是组合,顺序有讲究(冠亚季军、密码位)就是排列。把 n 和 k 填进来,四种口径的结果连同公式一起给出,对答案、讲题都用得上。
口径区分:组合 C(n,k) 不讲顺序(选 3 人开会),排列 P(n,k) 讲顺序(选 3 人排前三名),可重复排列 n^k 允许重复(密码每一位都可重选)——C(n,k) = P(n,k) ÷ k!。大数会超出常规整数范围,本工具用大数精度处理并按需给科学计数法。
这个工具解决你的问题了吗?
提交后会把工具名、你的输入与当前结果发送到服务器;请勿填写身份证号、手机号等隐私信息。
AI 助手 会结合你当前的输入与结果回答
追问会再次把当前输入与结果发送到服务器;请勿填写隐私信息。
使用步骤
- 输入 n(总数)与 k(选取个数)。
- 看 C(n,k)、P(n,k)、n^k 与阶乘,附公式。
- 区分场景:不讲顺序用 C,讲顺序用 P,可重复用 n^k。
- 复制结果;概率题先想清楚顺序是否重要。
计算原理与示例
组合与排列的区别
组合 C(n,k) = n! / (k!(n−k)!) 只关心「选出哪些」,不计顺序;排列 P(n,k) = n! / (n−k)! 还要计「排成什么顺序」,因此 P(n,k) = C(n,k) × k!。举个例子:从 10 人里选 3 人组成小组是 C(10,3) = 120 种;选 3 人分别当组长、副组长、记录员则是 P(10,3) = 720 种。
大数为什么不丢精度
结果用整数(BigInt)精确计算。20! = 2,432,902,008,176,640,000,已经超过 JavaScript 双精度能精确表示整数的上限 2^53(约 9×10^15),用普通浮点计算末几位会出错;C(52,5) = 2,598,960、C(100,3) = 161,700 这类组合数也常常超出直觉范围。工具限制 n ≤ 500,是为了避免结果位数过长(500! 有 1135 位)。
典型数值与常见场景
三种计数的典型场景:n^k 是「每次选完放回」的排列数,例如 4 位数字密码有 10^4 = 10,000 种、抛 3 次硬币有 2^3 = 8 种结果序列;组合用于抽奖、选队员、扑克手牌(五张牌共 C(52,5) = 2,598,960 种);排列用于排名、接力顺序、座位安排。
计算依据:组合 C(n,k) = n!/(k!(n−k)!)、排列 P(n,k) = n!/(n−k)!、可重复排列 n^k;所有阶乘与组合数用整数(BigInt)精确计算,n 上限 500。
代码示例
JavaScript 大数安全的组合排列
function C(n, k) { // 组合数:乘积法避免大阶乘
k = Math.min(k, n - k);
let r = 1;
for (let i = 1; i <= k; i++) r = r * (n - k + i) / i;
return Math.round(r);
}
const P = (n, k) => C(n, k) * factorial(k);
C(49, 6); // 13983816(双色球)
C(52, 5); // 2598960(扑克 5 张)
Python math.comb / perm 内置
import math
math.comb(49, 6) # 13983816(组合,Python 3.8+)
math.perm(49, 6) # 10068347520(排列)
math.factorial(10) # 3628800
# 大数天然支持(任意精度整数):
math.comb(1000, 500) # 精确值,不溢出
常见问题
C 和 P 到底差在哪里?
差在「要不要考虑顺序」。组合 C 只选不排,排列 P 既选又排,两者关系是 P(n,k) = C(n,k) × k!。当 k = 1 或 k = n 时数值相等(如 C(5,1) = P(5,1) = 5)。
什么情况下用组合?
当「选出的一组是无序的」时用组合:抽奖、选队员、扑克手牌、抽样检测。一旦要区分角色或先后(排名、密码、接力顺序),就换成排列。这是最容易混的一步。
为什么 C(52,5) 等于 2598960?
52 张牌取 5 张且不计顺序:52! / (5! × 47!) = (52×51×50×49×48) / 120 = 311,875,200 / 120 = 2,598,960。这也是扑克牌五张手牌的组合总数。
20 的阶乘有多大?
2,432,902,008,176,640,000,约 2.43×10^18(19 位数)。它超过了双精度能精确表示整数的上限 2^53,普通浮点算法末几位会失真,必须用整数运算,这正是本工具用 BigInt 的原因。
n 最大能填多少?k 比 n 大呢?
n 最大 500(再大结果位数过长,500! 有 1135 位)。k 不能大于 n,因为「从 3 个里选 5 个」在数学上无意义,工具会直接提示。
n^k 是做什么用的?
它对应「每次选完放回」的计数:4 位数字密码 10^4 = 10,000 种、抛 3 次硬币 2^3 = 8 种序列。这是与排列、组合并列的第三种常见计数方式,也最容易被混用。
计算过程会被记录或上传吗?
不会。n 与 k 只在浏览器本地做整数连乘运算,不上传服务器、也不做统计;计算历史仅存在本机浏览器中,可一键清空,无痕窗口关闭即消失。
延伸阅读
来自本站原创文章,讲清这个工具背后的算法与口径。