# 第二種スターリング数 Stirling Number Of The Second Kind # 引数 n個 k個 ($n, $k) # 戻り値 第二種スターリング数 ($StirlingNumber) sub STIRLINGNUMBERSECOND{ my ($n, $k) = @_; my $StirlingNumber = 0; my $N = int($n); my $K = int($k); my $Sum = 0; my $Factorial = 1; my $Combination = $K; my $Power1 = 0; my $Power2 = 0; # 個数の確認 if(($N < 0) || ($K < 0) || ($N < $K)){ return 0; } if(($N == $K) || ($K == 1)){ return 1; }elsif(($N == 0) || ($K == 0)){ return 0; } # 計算 for(my $i = 1; $i <= $K; $i++){ # 階乗 $Factorial = $Factorial * $i; # 二項係数 $Combination = $Combination / $i; # 累乗 $Power1 = (-1) ** ($K - $i); $Power2 = $i ** $N; $Sum += $Power1 * $Combination * $Power2; $Combination = $Combination * ($K - $i); } # 第二種スターリング数 Stirling Number Of The Second Kind $StirlingNumber = $Sum / $Factorial; return $StirlingNumber; }