Probabilmente si può fre anche in maniera più performante ma ho buttato giù la prima cosa che mi è venuta in mente:

Codice PHP:
<?php
function distributor($valueToDistrubute$maxValue$arrayDimension) {
    
$arr = array();
    for (
$i 0$i $arrayDimension$i++) {
        if (
$valueToDistrubute $maxValue) {
            
$maxValue $valueToDistrubute;
        }
        
$value rand(0$maxValue);
        
$arr[] = $value
        
$valueToDistrubute -= $value;
    }
    
shuffle($arr);
    return 
$arr;
}

$a distributor(800100100);
for(
$i 0$i 100$i++) {
    echo 
$i." - ".$a[$i]."<br/>";
}
?>