300 lines
19 KiB
Python
300 lines
19 KiB
Python
![]() |
import numpy as np
|
||
|
import itertools
|
||
|
|
||
|
# This file contains a dictionary that maps an integer n to the
|
||
|
# distribution of the Wilcoxon signed rank test statistic.
|
||
|
# The dictionary can be generated by the functions
|
||
|
# _generate_wilcoxon_exact_table and _generate_wilcoxon_exact_table_fast.
|
||
|
# The second function is about 20% faster.
|
||
|
|
||
|
|
||
|
def _generate_wilcoxon_exact_table(N):
|
||
|
"""
|
||
|
Generate counts of the Wilcoxon ranksum statistic r_plus (sum of
|
||
|
ranks of positive differences). For fixed n, simulate all possible states
|
||
|
{0, 1}**n and compute the sum of the ranks over the indices that are equal
|
||
|
to one (positive differences).
|
||
|
Return a dictionary that maps n=3,...N to the corresponding list of counts
|
||
|
"""
|
||
|
res_dict = {}
|
||
|
for n in range(1, N+1):
|
||
|
res = []
|
||
|
ranks = np.arange(n) + 1
|
||
|
M = n*(n + 1)/2
|
||
|
for x in itertools.product((0, 1), repeat=n):
|
||
|
# note that by symmetry, given a state x, we can directly compute
|
||
|
# the positive ranksum of the inverted state (i.e. ~x or 1 - x),
|
||
|
# therefore, it is enough to consider sequences starting with a one
|
||
|
if x[0] == 1:
|
||
|
rank_sum = np.sum(x * ranks)
|
||
|
res.append(rank_sum)
|
||
|
res.append(M - rank_sum)
|
||
|
_, cnt = np.unique(res, return_counts=True)
|
||
|
res_dict[n] = list(cnt)
|
||
|
return res_dict
|
||
|
|
||
|
|
||
|
def _generate_wilcoxon_exact_table_fast(N):
|
||
|
"""
|
||
|
Same functionality as _generate_wilcoxon_exact_table, but about 20% faster,
|
||
|
but harder to follow.
|
||
|
"""
|
||
|
res_dict = {}
|
||
|
for n in range(1, N+1):
|
||
|
ranks = np.arange(n) + 1
|
||
|
M = int(n*(n + 1)/2)
|
||
|
res = np.zeros(M + 1, dtype=int)
|
||
|
for x in itertools.product((0, 1), repeat=n):
|
||
|
if x[0] == 1:
|
||
|
rank_sum = int(np.sum(x * ranks))
|
||
|
res[rank_sum] += 1
|
||
|
# flip array to get counts of symmetric sequences starting with 0
|
||
|
res_dict[n] = list(res + np.flip(res))
|
||
|
return res_dict
|
||
|
|
||
|
|
||
|
COUNTS = {
|
||
|
1: [1, 1],
|
||
|
2: [1, 1, 1, 1],
|
||
|
3: [1, 1, 1, 2, 1, 1, 1],
|
||
|
4: [1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1],
|
||
|
5: [1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 1],
|
||
|
6: [1, 1, 1, 2, 2, 3, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 3, 2, 2, 1, 1, 1],
|
||
|
7: [1, 1, 1, 2, 2, 3, 4, 5, 5, 6, 7, 7, 8, 8, 8, 8, 8, 7, 7, 6, 5, 5, 4,
|
||
|
3, 2, 2, 1, 1, 1],
|
||
|
8: [1, 1, 1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13, 14, 13,
|
||
|
13, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 2, 1, 1, 1],
|
||
|
9: [1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 9, 10, 12, 13, 15, 17, 18, 19, 21, 21,
|
||
|
22, 23, 23, 23, 23, 22, 21, 21, 19, 18, 17, 15, 13, 12, 10, 9, 8, 6,
|
||
|
5, 4, 3, 2, 2, 1, 1, 1],
|
||
|
10: [1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 10, 11, 13, 15, 17, 20, 22, 24, 27, 29,
|
||
|
31, 33, 35, 36, 38, 39, 39, 40, 40, 39, 39, 38, 36, 35, 33, 31, 29,
|
||
|
27, 24, 22, 20, 17, 15, 13, 11, 10, 8, 6, 5, 4, 3, 2, 2, 1, 1, 1],
|
||
|
11: [1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 10, 12, 14, 16, 19, 22, 25, 28, 32, 35,
|
||
|
39, 43, 46, 49, 53, 56, 59, 62, 64, 66, 68, 69, 69, 70, 69, 69, 68,
|
||
|
66, 64, 62, 59, 56, 53, 49, 46, 43, 39, 35, 32, 28, 25, 22, 19, 16,
|
||
|
14, 12, 10, 8, 6, 5, 4, 3, 2, 2, 1, 1, 1],
|
||
|
12: [1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 10, 12, 15, 17, 20, 24, 27, 31, 36, 40,
|
||
|
45, 51, 56, 61, 67, 72, 78, 84, 89, 94, 100, 104, 108, 113, 115, 118,
|
||
|
121, 122, 123, 124, 123, 122, 121, 118, 115, 113, 108, 104, 100, 94,
|
||
|
89, 84, 78, 72, 67, 61, 56, 51, 45, 40, 36, 31, 27, 24, 20, 17, 15,
|
||
|
12, 10, 8, 6, 5, 4, 3, 2, 2, 1, 1, 1],
|
||
|
13: [1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 10, 12, 15, 18, 21, 25, 29, 33, 39, 44,
|
||
|
50, 57, 64, 71, 79, 87, 95, 104, 113, 121, 131, 140, 148, 158, 166,
|
||
|
174, 182, 189, 195, 202, 207, 211, 215, 218, 219, 221, 221, 219, 218,
|
||
|
215, 211, 207, 202, 195, 189, 182, 174, 166, 158, 148, 140, 131, 121,
|
||
|
113, 104, 95, 87, 79, 71, 64, 57, 50, 44, 39, 33, 29, 25, 21, 18, 15,
|
||
|
12, 10, 8, 6, 5, 4, 3, 2, 2, 1, 1, 1],
|
||
|
14: [1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 10, 12, 15, 18, 22, 26, 30, 35, 41, 47,
|
||
|
54, 62, 70, 79, 89, 99, 110, 122, 134, 146, 160, 173, 187, 202, 216,
|
||
|
231, 246, 260, 274, 289, 302, 315, 328, 339, 350, 361, 369, 377, 384,
|
||
|
389, 393, 396, 397, 397, 396, 393, 389, 384, 377, 369, 361, 350, 339,
|
||
|
328, 315, 302, 289, 274, 260, 246, 231, 216, 202, 187, 173, 160, 146,
|
||
|
134, 122, 110, 99, 89, 79, 70, 62, 54, 47, 41, 35, 30, 26, 22, 18,
|
||
|
15, 12, 10, 8, 6, 5, 4, 3, 2, 2, 1, 1, 1],
|
||
|
15: [1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 10, 12, 15, 18, 22, 27, 31, 36, 43, 49,
|
||
|
57, 66, 75, 85, 97, 109, 122, 137, 152, 168, 186, 203, 222, 243, 263,
|
||
|
285, 308, 330, 353, 378, 401, 425, 450, 473, 496, 521, 542, 564, 586,
|
||
|
605, 624, 642, 657, 671, 685, 695, 704, 712, 716, 719, 722, 719, 716,
|
||
|
712, 704, 695, 685, 671, 657, 642, 624, 605, 586, 564, 542, 521, 496,
|
||
|
473, 450, 425, 401, 378, 353, 330, 308, 285, 263, 243, 222, 203, 186,
|
||
|
168, 152, 137, 122, 109, 97, 85, 75, 66, 57, 49, 43, 36, 31, 27, 22,
|
||
|
18, 15, 12, 10, 8, 6, 5, 4, 3, 2, 2, 1, 1, 1],
|
||
|
16: [1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 10, 12, 15, 18, 22, 27, 32, 37, 44, 51,
|
||
|
59, 69, 79, 90, 103, 117, 132, 149, 167, 186, 208, 230, 253, 279,
|
||
|
306, 334, 365, 396, 428, 463, 498, 534, 572, 610, 648, 689, 728, 767,
|
||
|
808, 848, 887, 927, 965, 1001, 1038, 1073, 1105, 1137, 1166, 1192,
|
||
|
1218, 1240, 1258, 1276, 1290, 1300, 1309, 1313, 1314, 1313, 1309,
|
||
|
1300, 1290, 1276, 1258, 1240, 1218, 1192, 1166, 1137, 1105, 1073,
|
||
|
1038, 1001, 965, 927, 887, 848, 808, 767, 728, 689, 648, 610, 572,
|
||
|
534, 498, 463, 428, 396, 365, 334, 306, 279, 253, 230, 208, 186, 167,
|
||
|
149, 132, 117, 103, 90, 79, 69, 59, 51, 44, 37, 32, 27, 22, 18, 15,
|
||
|
12, 10, 8, 6, 5, 4, 3, 2, 2, 1, 1, 1],
|
||
|
17: [1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 10, 12, 15, 18, 22, 27, 32, 38, 45, 52,
|
||
|
61, 71, 82, 94, 108, 123, 140, 159, 179, 201, 226, 252, 280, 311,
|
||
|
343, 378, 416, 455, 497, 542, 588, 637, 689, 742, 797, 856, 914, 975,
|
||
|
1038, 1101, 1166, 1233, 1299, 1366, 1434, 1501, 1568, 1635, 1700,
|
||
|
1764, 1828, 1888, 1947, 2004, 2057, 2108, 2157, 2200, 2241, 2278,
|
||
|
2310, 2338, 2363, 2381, 2395, 2406, 2410, 2410, 2406, 2395, 2381,
|
||
|
2363, 2338, 2310, 2278, 2241, 2200, 2157, 2108, 2057, 2004, 1947,
|
||
|
1888, 1828, 1764, 1700, 1635, 1568, 1501, 1434, 1366, 1299, 1233,
|
||
|
1166, 1101, 1038, 975, 914, 856, 797, 742, 689, 637, 588, 542, 497,
|
||
|
455, 416, 378, 343, 311, 280, 252, 226, 201, 179, 159, 140, 123, 108,
|
||
|
94, 82, 71, 61, 52, 45, 38, 32, 27, 22, 18, 15, 12, 10, 8, 6, 5, 4,
|
||
|
3, 2, 2, 1, 1, 1],
|
||
|
18: [1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 10, 12, 15, 18, 22, 27, 32, 38, 46, 53,
|
||
|
62, 73, 84, 97, 112, 128, 146, 167, 189, 213, 241, 270, 302, 338,
|
||
|
375, 416, 461, 507, 558, 613, 670, 731, 797, 865, 937, 1015, 1093,
|
||
|
1176, 1264, 1353, 1446, 1544, 1642, 1744, 1850, 1956, 2065, 2177,
|
||
|
2288, 2401, 2517, 2630, 2744, 2860, 2971, 3083, 3195, 3301, 3407,
|
||
|
3511, 3609, 3704, 3797, 3882, 3963, 4041, 4110, 4174, 4234, 4283,
|
||
|
4328, 4367, 4395, 4418, 4435, 4441, 4441, 4435, 4418, 4395, 4367,
|
||
|
4328, 4283, 4234, 4174, 4110, 4041, 3963, 3882, 3797, 3704, 3609,
|
||
|
3511, 3407, 3301, 3195, 3083, 2971, 2860, 2744, 2630, 2517, 2401,
|
||
|
2288, 2177, 2065, 1956, 1850, 1744, 1642, 1544, 1446, 1353, 1264,
|
||
|
1176, 1093, 1015, 937, 865, 797, 731, 670, 613, 558, 507, 461, 416,
|
||
|
375, 338, 302, 270, 241, 213, 189, 167, 146, 128, 112, 97, 84, 73,
|
||
|
62, 53, 46, 38, 32, 27, 22, 18, 15, 12, 10, 8, 6, 5, 4, 3, 2, 2, 1,
|
||
|
1, 1],
|
||
|
19: [1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 10, 12, 15, 18, 22, 27, 32, 38, 46, 54,
|
||
|
63, 74, 86, 99, 115, 132, 151, 173, 197, 223, 253, 285, 320, 360,
|
||
|
402, 448, 499, 553, 611, 675, 743, 815, 894, 977, 1065, 1161, 1260,
|
||
|
1365, 1477, 1594, 1716, 1846, 1980, 2119, 2266, 2417, 2572, 2735,
|
||
|
2901, 3071, 3248, 3427, 3609, 3797, 3986, 4176, 4371, 4565, 4760,
|
||
|
4957, 5153, 5346, 5541, 5732, 5919, 6106, 6287, 6462, 6635, 6800,
|
||
|
6958, 7111, 7255, 7389, 7518, 7636, 7742, 7842, 7929, 8004, 8071,
|
||
|
8125, 8165, 8197, 8215, 8220, 8215, 8197, 8165, 8125, 8071, 8004,
|
||
|
7929, 7842, 7742, 7636, 7518, 7389, 7255, 7111, 6958, 6800, 6635,
|
||
|
6462, 6287, 6106, 5919, 5732, 5541, 5346, 5153, 4957, 4760, 4565,
|
||
|
4371, 4176, 3986, 3797, 3609, 3427, 3248, 3071, 2901, 2735, 2572,
|
||
|
2417, 2266, 2119, 1980, 1846, 1716, 1594, 1477, 1365, 1260, 1161,
|
||
|
1065, 977, 894, 815, 743, 675, 611, 553, 499, 448, 402, 360, 320, 285,
|
||
|
253, 223, 197, 173, 151, 132, 115, 99, 86, 74, 63, 54, 46, 38, 32, 27,
|
||
|
22, 18, 15, 12, 10, 8, 6, 5, 4, 3, 2, 2, 1, 1, 1],
|
||
|
20: [1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 10, 12, 15, 18, 22, 27, 32, 38, 46, 54,
|
||
|
64, 75, 87, 101, 117, 135, 155, 178, 203, 231, 263, 297, 335, 378,
|
||
|
424, 475, 531, 591, 657, 729, 806, 889, 980, 1076, 1180, 1293, 1411,
|
||
|
1538, 1674, 1817, 1969, 2131, 2300, 2479, 2668, 2865, 3071, 3288,
|
||
|
3512, 3746, 3991, 4242, 4503, 4774, 5051, 5337, 5631, 5930, 6237,
|
||
|
6551, 6869, 7192, 7521, 7851, 8185, 8523, 8859, 9197, 9536, 9871,
|
||
|
10206, 10538, 10864, 11186, 11504, 11812, 12113, 12407, 12689, 12961,
|
||
|
13224, 13471, 13706, 13929, 14134, 14326, 14502, 14659, 14800, 14925,
|
||
|
15029, 15115, 15184, 15231, 15260, 15272, 15260, 15231, 15184, 15115,
|
||
|
15029, 14925, 14800, 14659, 14502, 14326, 14134, 13929, 13706, 13471,
|
||
|
13224, 12961, 12689, 12407, 12113, 11812, 11504, 11186, 10864, 10538,
|
||
|
10206, 9871, 9536, 9197, 8859, 8523, 8185, 7851, 7521, 7192, 6869,
|
||
|
6551, 6237, 5930, 5631, 5337, 5051, 4774, 4503, 4242, 3991, 3746,
|
||
|
3512, 3288, 3071, 2865, 2668, 2479, 2300, 2131, 1969, 1817, 1674,
|
||
|
1538, 1411, 1293, 1180, 1076, 980, 889, 806, 729, 657, 591, 531, 475,
|
||
|
424, 378, 335, 297, 263, 231, 203, 178, 155, 135, 117, 101, 87, 75,
|
||
|
64, 54, 46, 38, 32, 27, 22, 18, 15, 12, 10, 8, 6, 5, 4, 3, 2, 2, 1, 1,
|
||
|
1],
|
||
|
21: [1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 10, 12, 15, 18, 22, 27, 32, 38, 46, 54,
|
||
|
64, 76, 88, 102, 119, 137, 158, 182, 208, 237, 271, 307, 347, 393,
|
||
|
442, 497, 558, 623, 695, 775, 860, 953, 1055, 1163, 1281, 1410, 1546,
|
||
|
1693, 1852, 2020, 2200, 2394, 2597, 2814, 3046, 3289, 3546, 3819,
|
||
|
4103, 4403, 4720, 5048, 5392, 5754, 6127, 6517, 6924, 7341, 7775,
|
||
|
8225, 8686, 9161, 9652, 10151, 10664, 11191, 11724, 12268, 12824,
|
||
|
13383, 13952, 14529, 15106, 15689, 16278, 16863, 17450, 18038, 18619,
|
||
|
19198, 19775, 20340, 20898, 21450, 21985, 22511, 23025, 23518, 23997,
|
||
|
24461, 24900, 25321, 25722, 26095, 26446, 26776, 27072, 27344, 27591,
|
||
|
27804, 27990, 28149, 28271, 28365, 28431, 28460, 28460, 28431, 28365,
|
||
|
28271, 28149, 27990, 27804, 27591, 27344, 27072, 26776, 26446, 26095,
|
||
|
25722, 25321, 24900, 24461, 23997, 23518, 23025, 22511, 21985, 21450,
|
||
|
20898, 20340, 19775, 19198, 18619, 18038, 17450, 16863, 16278, 15689,
|
||
|
15106, 14529, 13952, 13383, 12824, 12268, 11724, 11191, 10664, 10151,
|
||
|
9652, 9161, 8686, 8225, 7775, 7341, 6924, 6517, 6127, 5754, 5392,
|
||
|
5048, 4720, 4403, 4103, 3819, 3546, 3289, 3046, 2814, 2597, 2394,
|
||
|
2200, 2020, 1852, 1693, 1546, 1410, 1281, 1163, 1055, 953, 860, 775,
|
||
|
695, 623, 558, 497, 442, 393, 347, 307, 271, 237, 208, 182, 158, 137,
|
||
|
119, 102, 88, 76, 64, 54, 46, 38, 32, 27, 22, 18, 15, 12, 10, 8, 6,
|
||
|
5, 4, 3, 2, 2, 1, 1, 1],
|
||
|
22: [1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 10, 12, 15, 18, 22, 27, 32, 38, 46, 54,
|
||
|
64, 76, 89, 103, 120, 139, 160, 185, 212, 242, 277, 315, 357, 405,
|
||
|
457, 515, 580, 650, 727, 813, 906, 1007, 1119, 1239, 1369, 1512, 1665,
|
||
|
1830, 2010, 2202, 2408, 2631, 2868, 3121, 3393, 3682, 3988, 4316,
|
||
|
4661, 5026, 5415, 5823, 6252, 6707, 7182, 7680, 8205, 8751, 9321,
|
||
|
9918, 10538, 11181, 11852, 12545, 13261, 14005, 14770, 15557, 16370,
|
||
|
17202, 18055, 18932, 19826, 20737, 21670, 22617, 23577, 24555, 25543,
|
||
|
26539, 27550, 28565, 29584, 30611, 31637, 32662, 33689, 34709, 35721,
|
||
|
36729, 37724, 38704, 39674, 40624, 41552, 42465, 43350, 44207, 45041,
|
||
|
45842, 46609, 47347, 48046, 48705, 49329, 49910, 50445, 50942, 51390,
|
||
|
51789, 52146, 52451, 52704, 52912, 53066, 53167, 53222, 53222, 53167,
|
||
|
53066, 52912, 52704, 52451, 52146, 51789, 51390, 50942, 50445, 49910,
|
||
|
49329, 48705, 48046, 47347, 46609, 45842, 45041, 44207, 43350, 42465,
|
||
|
41552, 40624, 39674, 38704, 37724, 36729, 35721, 34709, 33689, 32662,
|
||
|
31637, 30611, 29584, 28565, 27550, 26539, 25543, 24555, 23577, 22617,
|
||
|
21670, 20737, 19826, 18932, 18055, 17202, 16370, 15557, 14770, 14005,
|
||
|
13261, 12545, 11852, 11181, 10538, 9918, 9321, 8751, 8205, 7680, 7182,
|
||
|
6707, 6252, 5823, 5415, 5026, 4661, 4316, 3988, 3682, 3393, 3121,
|
||
|
2868, 2631, 2408, 2202, 2010, 1830, 1665, 1512, 1369, 1239, 1119,
|
||
|
1007, 906, 813, 727, 650, 580, 515, 457, 405, 357, 315, 277, 242, 212,
|
||
|
185, 160, 139, 120, 103, 89, 76, 64, 54, 46, 38, 32, 27, 22, 18, 15,
|
||
|
12, 10, 8, 6, 5, 4, 3, 2, 2, 1, 1, 1],
|
||
|
23: [1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 10, 12, 15, 18, 22, 27, 32, 38, 46, 54,
|
||
|
64, 76, 89, 104, 121, 140, 162, 187, 215, 246, 282, 321, 365, 415,
|
||
|
469, 530, 598, 672, 754, 845, 944, 1053, 1173, 1303, 1445, 1601,
|
||
|
1768, 1950, 2149, 2362, 2593, 2843, 3110, 3398, 3708, 4039, 4393,
|
||
|
4773, 5176, 5606, 6065, 6550, 7065, 7613, 8189, 8799, 9444, 10120,
|
||
|
10833, 11583, 12368, 13191, 14054, 14953, 15892, 16873, 17891, 18950,
|
||
|
20052, 21190, 22371, 23593, 24852, 26152, 27493, 28869, 30284, 31737,
|
||
|
33223, 34744, 36301, 37886, 39502, 41149, 42818, 44514, 46234, 47970,
|
||
|
49726, 51499, 53281, 55074, 56876, 58679, 60484, 62291, 64087, 65877,
|
||
|
67658, 69419, 71164, 72890, 74585, 76255, 77894, 79494, 81056, 82579,
|
||
|
84052, 85478, 86855, 88172, 89433, 90636, 91770, 92841, 93846, 94774,
|
||
|
95632, 96416, 97119, 97745, 98293, 98755, 99136, 99436, 99647, 99774,
|
||
|
99820, 99774, 99647, 99436, 99136, 98755, 98293, 97745, 97119, 96416,
|
||
|
95632, 94774, 93846, 92841, 91770, 90636, 89433, 88172, 86855, 85478,
|
||
|
84052, 82579, 81056, 79494, 77894, 76255, 74585, 72890, 71164, 69419,
|
||
|
67658, 65877, 64087, 62291, 60484, 58679, 56876, 55074, 53281, 51499,
|
||
|
49726, 47970, 46234, 44514, 42818, 41149, 39502, 37886, 36301, 34744,
|
||
|
33223, 31737, 30284, 28869, 27493, 26152, 24852, 23593, 22371, 21190,
|
||
|
20052, 18950, 17891, 16873, 15892, 14953, 14054, 13191, 12368, 11583,
|
||
|
10833, 10120, 9444, 8799, 8189, 7613, 7065, 6550, 6065, 5606, 5176,
|
||
|
4773, 4393, 4039, 3708, 3398, 3110, 2843, 2593, 2362, 2149, 1950,
|
||
|
1768, 1601, 1445, 1303, 1173, 1053, 944, 845, 754, 672, 598, 530, 469,
|
||
|
415, 365, 321, 282, 246, 215, 187, 162, 140, 121, 104, 89, 76, 64, 54,
|
||
|
46, 38, 32, 27, 22, 18, 15, 12, 10, 8, 6, 5, 4, 3, 2, 2, 1, 1, 1],
|
||
|
24: [1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 10, 12, 15, 18, 22, 27, 32, 38, 46, 54,
|
||
|
64, 76, 89, 104, 122, 141, 163, 189, 217, 249, 286, 326, 371, 423,
|
||
|
479, 542, 613, 690, 776, 872, 976, 1091, 1219, 1357, 1509, 1677, 1857,
|
||
|
2054, 2270, 2502, 2755, 3030, 3325, 3644, 3990, 4360, 4758, 5188,
|
||
|
5645, 6136, 6663, 7222, 7819, 8458, 9133, 9852, 10617, 11423, 12278,
|
||
|
13184, 14136, 15141, 16203, 17315, 18485, 19716, 21001, 22348, 23760,
|
||
|
25229, 26764, 28366, 30028, 31758, 33558, 35419, 37349, 39350, 41412,
|
||
|
43543, 45745, 48006, 50335, 52732, 55186, 57705, 60288, 62923, 65618,
|
||
|
68372, 71172, 74024, 76928, 79869, 82855, 85884, 88939, 92029, 95151,
|
||
|
98288, 101448, 104627, 107808, 110999, 114195, 117380, 120558, 123728,
|
||
|
126870, 129992, 133089, 136142, 139159, 142135, 145051, 147915,
|
||
|
150722, 153453, 156116, 158707, 161206, 163622, 165951, 168174,
|
||
|
170300, 172326, 174232, 176029, 177714, 179268, 180703, 182015,
|
||
|
183188, 184233, 185148, 185917, 186552, 187052, 187402, 187615,
|
||
|
187692, 187615, 187402, 187052, 186552, 185917, 185148, 184233,
|
||
|
183188, 182015, 180703, 179268, 177714, 176029, 174232, 172326,
|
||
|
170300, 168174, 165951, 163622, 161206, 158707, 156116, 153453,
|
||
|
150722, 147915, 145051, 142135, 139159, 136142, 133089, 129992,
|
||
|
126870, 123728, 120558, 117380, 114195, 110999, 107808, 104627,
|
||
|
101448, 98288, 95151, 92029, 88939, 85884, 82855, 79869, 76928,
|
||
|
74024, 71172, 68372, 65618, 62923, 60288, 57705, 55186, 52732, 50335,
|
||
|
48006, 45745, 43543, 41412, 39350, 37349, 35419, 33558, 31758, 30028,
|
||
|
28366, 26764, 25229, 23760, 22348, 21001, 19716, 18485, 17315, 16203,
|
||
|
15141, 14136, 13184, 12278, 11423, 10617, 9852, 9133, 8458, 7819,
|
||
|
7222, 6663, 6136, 5645, 5188, 4758, 4360, 3990, 3644, 3325, 3030,
|
||
|
2755, 2502, 2270, 2054, 1857, 1677, 1509, 1357, 1219, 1091, 976, 872,
|
||
|
776, 690, 613, 542, 479, 423, 371, 326, 286, 249, 217, 189, 163, 141,
|
||
|
122, 104, 89, 76, 64, 54, 46, 38, 32, 27, 22, 18, 15, 12, 10, 8, 6,
|
||
|
5, 4, 3, 2, 2, 1, 1, 1],
|
||
|
25: [1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 10, 12, 15, 18, 22, 27, 32, 38, 46, 54,
|
||
|
64, 76, 89, 104, 122, 142, 164, 190, 219, 251, 289, 330, 376, 429,
|
||
|
487, 552, 625, 705, 794, 894, 1003, 1123, 1257, 1403, 1563, 1741,
|
||
|
1933, 2143, 2374, 2624, 2896, 3193, 3514, 3861, 4239, 4646, 5084,
|
||
|
5559, 6068, 6615, 7205, 7835, 8509, 9234, 10005, 10828, 11708, 12642,
|
||
|
13635, 14693, 15813, 16998, 18257, 19585, 20987, 22471, 24031, 25673,
|
||
|
27404, 29219, 31124, 33124, 35216, 37403, 39694, 42082, 44571, 47169,
|
||
|
49870, 52676, 55597, 58623, 61758, 65010, 68370, 71841, 75429, 79126,
|
||
|
82933, 86857, 90888, 95025, 99276, 103629, 108084, 112648, 117305,
|
||
|
122057, 126909, 131846, 136867, 141976, 147158, 152411, 157738,
|
||
|
163125, 168564, 174063, 179602, 185178, 190794, 196430, 202082,
|
||
|
207753, 213423, 219087, 224746, 230381, 235985, 241562, 247090,
|
||
|
252561, 257980, 263325, 268588, 273774, 278859, 283837, 288713,
|
||
|
293463, 298083, 302573, 306916, 311103, 315140, 319006, 322694,
|
||
|
326211, 329537, 332666, 335607, 338337, 340855, 343168, 345259,
|
||
|
347123, 348770, 350184, 351362, 352315, 353029, 353500, 353743,
|
||
|
353743, 353500, 353029, 352315, 351362, 350184, 348770, 347123,
|
||
|
345259, 343168, 340855, 338337, 335607, 332666, 329537, 326211,
|
||
|
322694, 319006, 315140, 311103, 306916, 302573, 298083, 293463,
|
||
|
288713, 283837, 278859, 273774, 268588, 263325, 257980, 252561,
|
||
|
247090, 241562, 235985, 230381, 224746, 219087, 213423, 207753,
|
||
|
202082, 196430, 190794, 185178, 179602, 174063, 168564, 163125,
|
||
|
157738, 152411, 147158, 141976, 136867, 131846, 126909, 122057,
|
||
|
117305, 112648, 108084, 103629, 99276, 95025, 90888, 86857, 82933,
|
||
|
79126, 75429, 71841, 68370, 65010, 61758, 58623, 55597, 52676, 49870,
|
||
|
47169, 44571, 42082, 39694, 37403, 35216, 33124, 31124, 29219, 27404,
|
||
|
25673, 24031, 22471, 20987, 19585, 18257, 16998, 15813, 14693, 13635,
|
||
|
12642, 11708, 10828, 10005, 9234, 8509, 7835, 7205, 6615, 6068, 5559,
|
||
|
5084, 4646, 4239, 3861, 3514, 3193, 2896, 2624, 2374, 2143, 1933,
|
||
|
1741, 1563, 1403, 1257, 1123, 1003, 894, 794, 705, 625, 552, 487,
|
||
|
429, 376, 330, 289, 251, 219, 190, 164, 142, 122, 104, 89, 76, 64,
|
||
|
54, 46, 38, 32, 27, 22, 18, 15, 12, 10, 8, 6, 5, 4, 3, 2, 2, 1, 1, 1]
|
||
|
}
|