Php 从大数生成的小数和较小数的总和必须是大数

Php 从大数生成的小数和较小数的总和必须是大数,php,Php,如何从一个大的数字中生成较小的随机数。这些较小数字的相加必须等于较大数字。假设我想生成400个随机数,并将这些较小的数相加=例如1000000。每个数字都应该是唯一的,并且有任何赋值。像数字1=1000和数字2可能只包含5。但所有数字的总和必须是一个很大的数字。在php中有任何算法可以执行这种操作吗 function array_generate_sum($n, $total) { $sum = 0; $arr = array(); for( ; $n >= 0;

如何从一个大的数字中生成较小的随机数。这些较小数字的相加必须等于较大数字。假设我想生成400个随机数,并将这些较小的数相加=例如1000000。每个数字都应该是唯一的,并且有任何赋值。像数字1=1000和数字2可能只包含5。但所有数字的总和必须是一个很大的数字。在php中有任何算法可以执行这种操作吗

function array_generate_sum($n, $total)
{
    $sum = 0;
    $arr = array();
    for( ; $n >= 0; $n--)
    {
        $current = $n == 0 ? $total - $sum : mt_rand(1, $total - $sum - $n);
        $sum += $current;
        $arr[] = $current;
    }
    return $arr;
}

嗨,谢谢你的回复。我用参数(4001000000)尝试了这个函数,但它不能正确地生成随机数。我需要更改函数中的任何内容吗?@NareshChauhan:你能说得更具体一点吗“它没有正确地生成数字”?你的意思是它不是正态分布的吗?实际上它会生成几个随机数,但当我们传递上述参数时,它会在几乎所有的数组keysHi中生成1作为随机数,谢谢你的回答。我用参数(4001000000)尝试了这个函数,但它不能正确地生成随机数。我需要更改函数中的任何内容吗?@NareshChauhan:你能说得更具体一点吗“它没有正确地生成数字”?你的意思是它不是正态分布的吗?实际上它会生成一些随机数,但当我们传递上述参数时,它会在几乎所有的数组键中生成1作为随机数
// Generate an array of 5 values whose sum is 30
array_generate_sum(5, 30);