| 
		
			Сообщение от oneguy
			
		
	 | 
	| 
		Есть 6 вариантов: [0, 0, 2], [0, 2, 0], [2, 0, 0], [0, 1, 1], [1, 0, 1], [1, 1, 0]. Первые 3 выпадают с вероятностью 4/27, остальные - 5/27.
	 | 
	
0002 x1 : 002
0012 x2 : 011
0022 x2 : 002
0112 x1 : 011
0122 x2 : 011
0222 x1 : 002
002 : 1+2+1 = 4x
011 : 2+1+2 = 5x
Да, всё верно. Это естественное распределение, так и должно быть.
function divide(a, n, m) {
  if (n*m>a)
    return;
  var b=[], d=[], p=a-(m-1)*n-1;
  for (var i=0; i<p; i++)
    b[i]=i;
  for (; i>a-m*n; i--) {
    var c=Math.floor(Math.random()*i);
    d.push(b[c]);
    b[c]=b[i-1];
  }
  d.sort(function (x, y) {
    return x-y;
  });
  d.push(p);
  b.length=0;
  b[0]=d[0]+m;
  for (i=0; i<n-1; i++)
    b.push(d[i+1]-d[i]+m-1);
  return b;
}
var time1 = (new Date()).getTime();
divide(10000000, 3, 0);
var time2 = (new Date()).getTime();
alert(((time2-time1)/1000).toFixed(3) + " sec.");
Ой, даааа... Не завидую тому, кто миллиард туда влепит... 

 Так что ваше решение тоже пока не идеально. 
