Oka Laboratory

Ways!

異なるn個の元 (element) からなる有限集合 (finite set) の中からr個を選ぶ順列 (permutation) や組み合わせ (combination) の総数 (number of ways) を計算します。

場合の数の計算

nとrから算出
項目 結果
組合せ
重複組合せ
順列
重複順列
円順列
数珠順列
確率
nのみで算出
項目 結果
完全順列
階乗 n!
二重階乗n‼
中心二項係数
Catalan数
Motzkin数
電話数
怠け仕出し屋数
ケーキ数

使用方法

利用上の注意

アルゴリズム

各値は次式で算出しています。

階乗
n!=∏k=1nk=n×(n−1)×⋯×3×2×1
二重階乗
n!!=∏k=0⌈n/2⌉−1(n−2⁢k)= { n×(n−2)×⋯×4×2(n:even) n×(n−2)×⋯×3×1(n:odd)
順列
Prn =n!(n−r)! =n×(n−1)×(n−2)×⋯×(n−r+1)
組合せ
Crn =Prnr! =n!r!⁢(n−r)! =n1×n−12×⋯×n−r+1r
重複組合せ
Hrn =Crn+r−1 =(n+r−1)!r!⁢(n−1)!
重複順列
Πrn=nr=n×n×⋯×n
円順列
cir⁡(n,r) =Prnr =n×(n−1)×⋯×(n−r+1)r
数珠順列
neck⁡(n,r) =cir⁡(n,r)2 =Prn2⁢r =n×(n−1)×⋯×(n−r+1)2⁢r
確率
p(r)=rn
完全順列
{ D1=0,D2=1 Dn=(n−1)×(Dn−1+Dn−2)(n≥3)
中心二項係数
Cn2⁢n =(2⁢n)!(n!)2
カタラン数
cn =Cn2⁢nn+1 =(2⁢n)!n!⁢(n+1)!
モツキン数
{ M0=1,M1=1 Mn =2⁢n+1n+2⁢Mn−1 +3⁢n−3n+2⁢Mn−2(n≥2)
電話数
{ T0=1,T1=1 Tn=Tn−1+(n−1)⁢Tn−2(n≥2)
怠け仕出し屋
pn =n2+n+22 =n⁢(n+1)2+1
ケーキ数
Cn =16⁢(n3+5⁢n+6) =(n×n+5)⁢n6+1

確率で表示する分数 (fraction) は分子 (numerator) と分母 (denominator) の最大公約数 (greatest common divisor) をユークリッドの互除法 (Euclidean Algorithm) で求めて約分 (reduce a fraction) をしています。下記の reduce_fraction 関数の戻り値はMathML (Mathematical Markup Language) の文字列で返しています。

var reduce_fraction = function(num, denom) {
	const tag_math_1 = '<math><mfrac><mn>';
	const tag_math_2 = '</mn><mn>';
	const tag_math_3 = '</mn></mfrac></math>';
	var gcd = (function(a, b) {
	/* Euclidean Algorithmによる最大公約数の計算 */
		var r;
		while (b !== 0) {
			r = a % b;
			a = b;
			b = r;
		}
		return Math.abs(a);
	}(num, denom));
	num /= gcd;
	denom /= gcd;
	return tag_math_1 + num + tag_math_2 + denom + tag_math_3;
};

正当なCSSです!