fork download
  1. <?php
  2.  
  3. function randPairs($num, $sum)
  4. {
  5. // Populate array with random float values
  6. $nums = array_fill(0, $num - 1, 0);
  7. for ($i = 0; $i < $num; $i++) { $nums[$i] = rand() / getrandmax(); }
  8.  
  9. // Scale the array so the sum matches the target sum
  10. $scale = $sum / array_sum($nums);
  11. for ($i = 0; $i < $num; $i++) { $nums[$i] = round($nums[$i] * $scale); }
  12.  
  13. // Comensate for bad rounding
  14. $diff = $sum - array_sum($nums);
  15. $nums[0] += $diff;
  16.  
  17. return $nums;
  18. }
  19.  
  20. $iter = 1000000;
  21. $num = 5;
  22. $sum = 100;
  23.  
  24. $freq = array_fill(0, $sum+1, 0);
  25. for ($i = 0; $i < $iter; $i++)
  26. {
  27. $res = randPairs($num, $sum);
  28. foreach ($res as $r) { $freq[$r]++; }
  29. }
  30.  
  31.  
  32. for ($i = 0; $i < $sum; $i++)
  33. {
  34. echo $i ." = ". number_format($freq[$i]) . PHP_EOL;
  35. }
  36.  
  37. ?>
Success #stdin #stdout 11.42s 13064KB
stdin
Standard input is empty
stdout
0 = 50,187
1 = 101,177
2 = 104,170
3 = 106,860
4 = 108,551
5 = 110,517
6 = 112,678
7 = 115,574
8 = 118,370
9 = 121,720
10 = 122,984
11 = 126,100
12 = 128,662
13 = 132,324
14 = 134,978
15 = 138,914
16 = 142,221
17 = 145,833
18 = 148,095
19 = 152,391
20 = 156,026
21 = 160,168
22 = 163,758
23 = 166,249
24 = 166,816
25 = 165,997
26 = 161,133
27 = 156,411
28 = 146,639
29 = 135,682
30 = 124,362
31 = 112,577
32 = 100,801
33 = 89,261
34 = 79,515
35 = 69,921
36 = 60,386
37 = 52,021
38 = 44,972
39 = 38,769
40 = 33,018
41 = 28,583
42 = 24,388
43 = 20,646
44 = 17,507
45 = 15,152
46 = 12,847
47 = 10,741
48 = 9,451
49 = 7,792
50 = 6,775
51 = 5,600
52 = 4,923
53 = 4,154
54 = 3,565
55 = 3,004
56 = 2,516
57 = 2,179
58 = 1,966
59 = 1,627
60 = 1,323
61 = 1,195
62 = 1,077
63 = 865
64 = 704
65 = 624
66 = 500
67 = 458
68 = 367
69 = 338
70 = 276
71 = 217
72 = 200
73 = 174
74 = 121
75 = 106
76 = 86
77 = 61
78 = 77
79 = 53
80 = 36
81 = 24
82 = 27
83 = 22
84 = 15
85 = 9
86 = 7
87 = 7
88 = 4
89 = 6
90 = 3
91 = 2
92 = 1
93 = 3
94 = 0
95 = 0
96 = 0
97 = 0
98 = 0
99 = 0