Как получить массив случайных чисел, сумма которых равна 500?
Предположим, что числа нужны целые неотрицательные. Если числа могут быть нулевыми, делаете так:
n1=irand(501);  // от 0 до 500
n2=irand(501);  // от 0 до 500
n3=irand(501);  // от 0 до 500
sort(n1,n2,n3);  // сортируете по возрастанию любым подходящим способом
x0=n1; x1=n2-n1; x3=n3-n2; x4=500-n3;
Если числа могут быть только положительными, то поступаете аналогично: 
n1=irand(497);  // от 0 до 496
n2=irand(497);  // от 0 до 496
n3=irand(497);  // от 0 до 496
sort(n1,n2,n3);  // сортируете по возрастанию любым подходящим способом
x0=n1+1; x1=n2-n1+1; x3=n3-n2+1; x4=496-n3+1;
Распределение будет слегка неравномерным (наборы, содержащие нули в первом случае и единицы - во втором, будут встречаться чуть реже), но и это можно исправить, слегка усложнив программу.
На ночь гляда я накидал такой рандомный говнокод, но суть вы думаю пойметеfunction random500() {
  var n1 = Math.ceil(Math.random()*499);
  var n2 = Math.ceil(Math.random()*(500-n1));
  var n3 = 500 - n1 - n2;
  console.log(n1 + " " + n2 + " " + n3);
}
Можете прямо в консоле f12 погонять. Потолок в 499 для первого числа соответственно чтобы случайно не попалось 500, тогда остальные два (или сколько вам надо) будут равны нулю. По идее надо заменить на 500, но это уже сами думайте.