# 多項係数 Multinomial Coefficient # 引数 数値 (\@N) # 戻り値 多項係数 ($MultinomialCoefficient) sub MULTINOMIALCOEFFICIENT{ my ($N) = @_; my $MultinomialCoefficient = 1; my @NaturalNumber = (); my $Factorial = 1; my $Highest = 1; my $SumN = 0; my $Count = @N - 1; # 値の確認 for(my $i = 0; $i <= $Count; $i++){ if($N[$i] < 0){ return 0; }else { $NaturalNumber[$i] = int($N[$i]); $SumN += $NaturalNumber[$i]; } # 最も高い数値を階乗の計算から除外 if($NaturalNumber[$i] > $Highest){ $Highest = $NaturalNumber[$i]; } } # 階乗 for(my $i = $SumN; $i > $Highest; $i--){ $Factorial = $Factorial * $i; } # 計算 for(my $i = $Count; $i >= 0; $i--){ if($NaturalNumber[$i] != $Highest){ for(my $j = $NaturalNumber[$i]; $j >= 2; $j--){ $Factorial = $Factorial / $j; } }else { $Highest = 0; } } # 多項係数 Multinomial Coefficient $MultinomialCoefficient = $Factorial; return $MultinomialCoefficient; }