#awkのプログラムソースです。
#n人をmグループに分ける方法が何通りあるかを計算します。
#デバッグを兼ねて、60人以下を12グループ以下に分ける場合について1行ごと出力しています。
#2000/3/20 (C) MATSUOKA , Hajime
#階乗a!の関数
function fact(a){
f=1
for(j=2;j<=a;j++){
f*=j
}
return(f)
}
#組み合わせ aCbの関数
function combi(a,b){
f=1
for(k=1;k<=b;k++){
f*=a-k+1
}
for(k=2;k<=b;k++){
f/=k
}
return(f)
}
#メインの部分 引数はありません。
#mは1から順に計算する必要があります。
BEGIN{
for(n=1;n<=60;n++){
for(m=1;m<=n && m<=12 ;m++){
sum=m^n
for(i=1;i<m;i++){
sum-=combi(m,i)*fact(i)*b[n,i]
}
b[n,m]=sum/fact(m)
print n,m,b[n,m]
}
}
}
2004/01/26更新