Scilabで重複円順列
今回のエントリでは、以下の重複円順列の公式をScilabで計算してみます。
n 種類の中から重複を許して r 個選び円形に並べる並べ方の総数は\begin{equation}\frac{1}{r}\sum_{k=1}^r n^{(r,k)}\end{equation}である。記号 (a, b) は整数 a, b の最大公約数を表すものとする。
例題
ゴンドラが6個ある観覧車がある。この6個のゴンドラを、赤、青、黄、緑の4色で塗装したい。塗装の仕方は何通りあるか。
回答
観覧車は回転するので、まさに重複円順列である。公式 I より
\begin{equation}\frac{1}{6}\sum_{k=1}^{6}4^(6, k) = \frac{1}{6}(4^1 + 4^ 2 + 4^3 + 4^2 + 4^1 + 4^6)=700\end{equation}を得る。
この例題を計算するScilabスクリプトは、下記のようになりました。
clear;
// *** 入力パラメータ ***
n = 4; // n種類
r = 6; // r個
// *** 最大公約数の和 ***
N = 0;
for k=1:r
N = N + n ^ gcd([r, k]);
end
// *** 答え ***
N / r実行すると、例題の通り700という答えを返します。ここで
gcd([a, b]) が整数 a, b の最大公約数を計算するScilabの関数です。forループを避けたかったのですが gcd([a, b]) に3個以上の引数を与えると、すべての引数の最大公約数を返してしまうので無理でした。関連エントリ
参考URL
フィードバック
↑ 電子工作ブログランキング参加中です。1クリックお願いします。
コメント・トラックバックも歓迎です。 ↓
↓ この記事が面白かった方は「拍手」をお願いします。