- sprintf: documentation ( source)
<?php
// 合計12種類あるガチャで、まわした回数に対して全種類コンプリートできている確率
// の表を作る
// 少なくとも12回は回さないとコンプリートはできないので、
// スタートを12にする
for ($i = (0 + 12); $i < (100 + 12); $i++) {
/*
* | 回すの何回目? | 引いて良いターゲットの種類 |
* | --- | --- |
* | 1 | 12 |
* | 2 | 11 |
* | 3 | 10 |
* | .. | .. | // 最初の12回は、 12 - n + 1 で良いようだ
* | 12 | 1 | // この時点でコンプリート
* | 13 | 12 |
* | 14 | 12 |
*/
$targetsCount =
gmp_mul( // 引いて良いターゲットの集合の要素数 & 万分率
gmp_mul( // 引いて良いターゲットの集合の要素数
gmp_fact(12), // 12回目までの分
gmp_pow(12, $i - 12) // 13回目以降の分
),
gmp_init("10000") // 万分率にするため
);
$sumCount = gmp_pow(12, $i); // 分母。 12 ** $i
echo sprintf('%03d 回目', $i) . "\t"
. gmp_div_q(
gmp_mul($targetsCount, gmp_init($i)) // 組み合わせなので。
, $sumCount
)
.PHP_EOL;
}