PHPで整数分割のアルゴリズム(partition)

例えば10000円を支払わなければならない状況で、毎月ある金額を3ヶ月に渡って分割して支払いたいときなどは、そのまま3で割ってしまうと少数になって困ってしまいます。 そんな時のための整数分割アルゴリズムです。

以下のコードでは$dividend$n個の整数に分割します。

function partition($dividend, $n){

    // 整数分割アルゴリズム
    $base = floor($dividend / $n); // 最低の配当
    $rem  = $dividend % $n; // あまり

    $list = [];

    for($i = 0; $i < $n; $i ++){
        $list[] = ($i < $rem) ? $base + 1 : $base;
    }
    return $list;
}

上の例だと以下が出力されます。

(
    [0] => 334
    [1] => 333
    [2] => 333
)