12namespace layer1_foundations {
13namespace combinatorics {
32 for (i = 2; i <= a; i++) {
43 for (k = 1; k <= i; k++) {
44 mue += part[k - 1] * k;
46 for (k = i + 1; k <= m; k++) {
47 mue += part[k - 1] * i;
53 int *part,
int *dual_part,
int n,
int verbose_level)
55 int f_v = (verbose_level >= 1);
56 int f_vv = (verbose_level >= 2);
60 cout <<
"partition_dual" << endl;
68 for (i = n; i >= 1; i--) {
69 if (part[i - 1] == 0) {
75 dual_part[s - 1] = j - i;
77 cout <<
"partition_dual i=" << i <<
" j=" << j
78 <<
" aj=" << aj <<
" s=" << s << endl;
88 cout <<
"partition_dual j=" << j <<
" aj=" << aj
89 <<
" s=" << s << endl;
93 cout <<
"partition_dual" << endl;
101 int *&Table,
int &nb,
int verbose_level)
103 int f_v = (verbose_level >= 1);
108 cout <<
"combinatorics_domain::make_all_partitions_of_n n=" << n << endl;
112 cout <<
"combinatorics_domain::make_all_partitions_of_n nb=" << nb << endl;
128 cout <<
"combinatorics_domain::make_all_partitions_of_n done" << endl;
134 int verbose_level = 0;
135 int f_v = (verbose_level >= 1);
140 cout <<
"combinatorics_domain::count_all_partitions_of_n "
155 cout <<
"combinatorics_domain::count_all_partitions_of_n "
156 "done, cnt=" << cnt << endl;
177 for (i = 1; i < n; i++) {
183 for (j = i - 1; j >= 0; j--) {
200 for (i = n; i >= 1; i--) {
207 ost << i <<
"^" << a;
225 int i, k, ipk, f_is_regular;
234 while (v[ipk] == v[i] && i < len - 1) {
236 if (ipk == len - 1) {
243 f_is_regular = (v[ipk] < v[i]);
245 }
while (f_is_regular && k <= len - 1);
255 for (a = 0; a < Q; a++) {
264 for (i = 0; i < len; i++) {
286 for (a++; a < Q; a++) {
315 for (i = 0; i < p; i++) {
316 for (j = 0; j < q; j++) {
322 cout <<
"combinatorics_domain::int_vec_splice h != len" << endl;
334 for (i = 0; i < sz_B; i++) {
338 for (i = 0; i < sz_A; i++) {
355 cout <<
"set_find fatal: did not find" << endl;
356 cout <<
"a=" << a << endl;
365 int *subset,
int subset_size,
366 int *complement,
int &size_complement,
367 int universal_set_size)
374 for (i = 0; i < universal_set_size; i++) {
375 if (j < subset_size && subset[j] == i) {
379 complement[size_complement++] = i;
384 long int *subset,
int subset_size,
385 long int *complement,
int &size_complement,
386 int universal_set_size)
393 for (i = 0; i < universal_set_size; i++) {
394 if (j < subset_size && subset[j] == i) {
398 complement[size_complement++] = i;
403 int *subset,
int subset_size,
404 int *complement,
int &size_complement,
405 int universal_set_size)
412 subset2 =
NEW_int(subset_size);
418 for (i = 0; i < universal_set_size; i++) {
419 if (j < subset_size && subset2[j] == i) {
423 complement[size_complement++] = i;
429 int *elts,
int &size,
430 int *elts_to_add,
int nb_elts_to_add)
434 for (i = 0; i < nb_elts_to_add; i++) {
447 for (i = size; i > idx; i--) {
448 elts[i] = elts[i - 1];
455 int *elts_to_delete,
int nb_elts_to_delete)
459 for (i = 0; i < nb_elts_to_delete; i++) {
473 for (i = idx; i < size; i++) {
474 elts[i] = elts[i + 1];
481 int a_len,
long int *a,
int b_len,
long int *b)
486 for (i = 0; i < l; i++) {
514 int &m,
int &n,
int *&M,
517 int f_v = (verbose_level >= 1);
518 int f_vv = (verbose_level >= 2);
524 for (i = 0; i < m; i++) {
525 for (j = 0; j < n; j++) {
530 cout <<
"make_t_k_incidence_matrix computed " << m <<
" x " << n
531 <<
" KM matrix" << endl;
547 for (i = 0; i < nb; i++) {
557 int rk_t_subset,
int rk_k_subset)
560 int i, j = 0, f_subset =
TRUE;
567 for (i = 0; i < t; i++) {
569 if (set1[i] == set2[j]) {
596 int *set,
int sz,
int n,
int a0,
int &r)
605 for (a = a0; a < n; a++) {
624 int *set,
int &sz,
int n,
int a0,
int &r)
633 for (a = a0; a < n; a++) {
656 for (i = 0; i < n; i++) {
680 for (i = 0; i < n; i++) {
702 for (i = 0; i < n; i++) {
703 if (j < k && set[j] == i) {
720 for (i = 0; i < k; i++) {
730 for (i = 0; i < k; i++) {
733 set[k - 1 - i] = a + 1;
734 for (ii = i - 1; ii >= 0; ii--) {
735 set[k - 1 - ii] = set[k - 1 - ii - 1] + 1;
744 int *set,
int n,
int k,
int backtrack_level)
748 start = k - 1 - backtrack_level;
749 for (i = start; i < k; i++) {
752 set[k - 1 - i] = a + 1;
753 for (ii = i - 1; ii >= 0; ii--) {
754 set[k - 1 - ii] = set[k - 1 - ii - 1] + 1;
763 int *set,
int *k_subset_idx,
int *permuted_set)
769 for (i = 0; i < k; i++) {
770 permuted_set[i] = set[k_subset_idx[i]];
771 for (j++; j < k_subset_idx[i]; j++) {
772 permuted_set[k + ii] = set[j];
776 for (j++; j < n; j++) {
777 permuted_set[k + ii] = set[j];
781 cout <<
"ii != n - k" << endl;
791 cout <<
"ordered_pair_rank i == j" << endl;
827 int i,
int j,
int k,
int l,
int m,
int n)
829 int verbose_level = 0;
830 int f_v = (verbose_level >= 1);
838 cout <<
"unordered_triple_pair_rank " << i << j
839 <<
"," << k << l <<
"," << m << n << endl;
866 for (u = sz; u > b; u--) {
873 cout <<
"unordered_triple_pair_rank : b = " << b <<
" : ";
880 cout <<
"unordered_triple_pair_rank k > six[0]" << endl;
883 for (u = sz; u > 0; u--) {
890 cout <<
"unordered_triple_pair_rank : b = " << b <<
" : ";
899 cout <<
"unordered_triple_pair_rank : b = " << b
900 <<
" a = " << a << endl;
952 cout <<
"set_partition_4_into_2_rank v[0] != 0";
957 else if (v[1] == 2) {
960 else if (v[1] == 3) {
964 cout <<
"set_partition_4_into_2_rank something is wrong" << endl;
970 int &i,
int &j,
int &k,
int &l,
int &m,
int &n)
982 for (u = 0; u < 5; u++) {
991 for (u = a + 1; u < sz; u++) {
1002 for (u = 1; u < sz; u++) {
1003 six[u - 1] = six[u];
1013 for (u = b + 1; u < sz; u++) {
1014 six[u - 1] = six[u];
1018 cout <<
"unordered_triple_pair_unrank sz != 2" << endl;
1035 cout <<
"combinatorics_domain::ij2k_lint i == j" << endl;
1042 return ((
long int) (n - i) * (
long int) i + (((
long int) i * (
long int) (i - 1)) >> 1)
1043 + (
long int) j - (
long int) i - (
long int) 1);
1049 long int ii, k_save = k;
1051 for (ii = 0; ii < n; ii++) {
1052 if (k < n - ii - 1) {
1059 cout <<
"combinatorics_domain::k2ij_lint k too large: k = " << k_save
1060 <<
" n = " << n << endl;
1067 cout <<
"ij2k() i == j" << endl;
1071 return ij2k(j, i, n);
1074 return ((n - i) * i + ((i * (i - 1)) >> 1) + j - i - 1);
1082 for (ii = 0; ii < n; ii++) {
1083 if (k < n - ii - 1) {
1090 cout <<
"k2ij: k too large: k = " << k_save
1091 <<
" n = " << n << endl;
1121 int *available_digits;
1131 available_digits =
NEW_int(n);
1133 for (i = 0; i < n; i++) {
1134 available_digits[i] = i;
1137 for (i = 0; i < n; i++) {
1138 if ((i % 1000) == 0) {
1139 cout <<
"random_permutation " << i <<
" / " << n << endl;
1143 available_digits[a] = available_digits[l - 1];
1145 for (j = a; j < l - 1; j++) {
1146 available_digits[j] = available_digits[j + 1];
1159 for (i = 0; i < n; i++) {
1168 for (i = 0; i < n; i++) {
1177 for (i = 0; i < n; i++) {
1190 cout <<
"perm_elementary_transposition f >= n - 1" << endl;
1193 for (i = 0; i < n; i++) {
1204 for (i = 0; i < n; i++) {
1206 if (j < 0 || j >= n) {
1207 cout <<
"perm_mult a[" << i <<
"] = " << j
1208 <<
" out of range" << endl;
1212 if (k < 0 || k >= n) {
1213 cout <<
"perm_mult b[a[" << i <<
"] = " << j
1214 <<
"] = " << k <<
" out of range" << endl;
1226 for (i = 0; i < n; i++) {
1240 for (i = 0; i < n; i++) {
1251 for (i = 0; i < n; i++) {
1253 for (j = 0; j < e; j++) {
1261 int *perm1,
int *perm2,
int *perm3)
1263 long int i, j, a, b, c;
1265 for (i = 0; i < n1; i++) {
1266 for (j = 0; j < n2; j++) {
1270 perm3[i * n2 + j] = c;
1279 for (i = 0; i < n; i++) {
1281 if (a[i] < 0 || a[i] >= n) {
1282 cout <<
"a[" << i <<
"] out of range" << endl;
1290 ostream &ost,
int *a,
int n,
int offset)
1294 for (i = 0; i < n; i++) {
1295 ost << offset + a[i] <<
" ";
1296 if (a[i] < 0 || a[i] >= n) {
1297 cout <<
"a[" << i <<
"] out of range" << endl;
1305 ostream &ost,
int *a,
1306 int m_plus_n,
int m,
int offset,
int f_cycle_length)
1311 f_cycle_length,
FALSE, 0,
FALSE, NULL, NULL);
1321 perm_print_offset(ost, a, n, 0,
FALSE,
FALSE,
FALSE, 0,
FALSE, NULL, NULL);
1327 void (*point_label)(std::stringstream &sstr,
long int pt,
void *data),
1328 void *point_label_data)
1331 point_label, point_label_data);
1335 ostream &ost,
int *a,
int n)
1337 perm_print_offset(ost, a, n, 0,
FALSE,
TRUE,
FALSE, 0,
TRUE, NULL, NULL);
1341 ostream &ost,
int *a,
int n)
1343 perm_print_offset(ost, a, n, 1,
FALSE,
FALSE,
FALSE, 0,
FALSE, NULL, NULL);
1349 int f_print_cycles_of_length_one,
1351 int f_max_cycle_length,
1352 int max_cycle_length,
1353 int f_orbit_structure,
1354 void (*point_label)(std::stringstream &sstr,
long int pt,
void *data),
1355 void *point_label_data)
1358 int i, l, l1, first, next, len;
1359 int f_nothing_printed_at_all =
TRUE;
1360 int *orbit_length = NULL;
1364 if (f_orbit_structure) {
1368 for (l = 0; l < n; l++) {
1369 have_seen[l] =
FALSE;
1385 cout <<
"perm_print_offset cyle starting with "
1387 cout <<
"l1 = " << l1 <<
" >= n" << endl;
1390 have_seen[l1] =
TRUE;
1393 cout <<
"perm_print_offset next = " << next
1394 <<
" >= n = " << n << endl;
1398 if (next == first) {
1401 if (have_seen[next]) {
1402 cout <<
"perm_print_offset have_seen[next]" << endl;
1403 cout <<
"first=" << first << endl;
1404 cout <<
"len=" << len << endl;
1405 cout <<
"l1=" << l1 << endl;
1406 cout <<
"next=" << next << endl;
1407 for (i = 0; i < n; i++) {
1408 cout << i <<
" : " << a[i] << endl;
1418 if (f_orbit_structure) {
1419 orbit_length[nb_orbits++] = len;
1421 if (!f_print_cycles_of_length_one) {
1426 if (f_max_cycle_length && len > max_cycle_length) {
1429 f_nothing_printed_at_all =
FALSE;
1437 (*point_label)(sstr, l1, point_label_data);
1444 if (next == first) {
1451 if (f_cycle_length) {
1453 ost <<
"_{" << len <<
"}";
1458 if (f_nothing_printed_at_all) {
1461 if (f_orbit_structure) {
1465 C.
init(orbit_length, nb_orbits,
FALSE, 0);
1467 cout <<
"cycle type: ";
1478 int *perm,
long int degree,
int *cycles,
int &nb_cycles)
1481 long int i, l, l1, first, next, len;
1486 for (l = 0; l < degree; l++) {
1487 have_seen[l] =
FALSE;
1490 while (l < degree) {
1503 cout <<
"perm_cycle_type cyle starting with "
1505 cout <<
"l1 = " << l1 <<
" >= degree" << endl;
1508 have_seen[l1] =
TRUE;
1510 if (next >= degree) {
1511 cout <<
"perm_cycle_type next = " << next
1512 <<
" >= degree = " << degree << endl;
1516 if (next == first) {
1519 if (have_seen[next]) {
1520 cout <<
"perm_cycle_type have_seen[next]" << endl;
1521 cout <<
"first=" << first << endl;
1522 cout <<
"len=" << len << endl;
1523 cout <<
"l1=" << l1 << endl;
1524 cout <<
"next=" << next << endl;
1525 for (i = 0; i < degree; i++) {
1526 cout << i <<
" : " << perm[i] << endl;
1536 cycles[nb_cycles++] = len;
1544 long int i, l, l1, first, next, len, order = 1;
1548 for (l = 0; l < n; l++) {
1549 have_seen[l] =
FALSE;
1562 have_seen[l1] =
TRUE;
1565 cout <<
"perm_order: next = " << next
1566 <<
" > n = " << n << endl;
1570 if (next == first) {
1573 if (have_seen[next]) {
1574 cout <<
"perm_order: have_seen[next]" << endl;
1575 for (i = 0; i < n; i++) {
1576 cout << i <<
" : " << a[i] << endl;
1586 order = len * order / NT.
gcd_lint(order, len);
1594 long int i, j, a, b, f;
1600 for (i = 0; i < n; i++) {
1602 for (j = i + 1; j < n; j++) {
1626 for (i = 0; i < n; i++) {
1627 if (perm2[i] != i) {
1649 for (i = 0; i < n; i++) {
1650 if (perm2[i] != i) {
1667 for (i = 0; i < n; i++) {
1676 for (i = 0; i < n; i++) {
1677 if (v[i] < n - 1 - i) {
1679 for (i--; i >= 0; i--) {
1689 int n,
int *code,
int *perm)
1695 for (i = 0; i < n; i++) {
1699 for (i = 0; i < n; i++) {
1704 perm[i] = digits[k];
1705 for (j = k; j < n - i - 1; j++) {
1706 digits[j] = digits[j + 1];
1729 int *A,
int n,
int kmax,
int *memo,
int verbose_level)
1731 int f_vv = (verbose_level >= 2);
1734 for (k = 1; k <=
MINIMUM(kmax, n); k++) {
1737 cout <<
"Hall test fails, k=" << k << endl;
1743 cout <<
"Hall test fails, k=" << k <<
", dual" << endl;
1752 int *A,
int n,
int k,
int *memo,
int verbose_level)
1755 int f_v = (verbose_level >= 1);
1756 int f_vv = (verbose_level >= 2);
1764 for (j = 0; j < n; j++) {
1765 for (l = 0; l < k; l++) {
1780 cout <<
"Hall test fails for " << k <<
"-set ";
1782 cout <<
" c=" << c <<
" n=" << n << endl;
1785 for (l = 0; l < k; l++) {
1787 for (j = 0; j < n; j++) {
1805 int *A,
int n,
int k,
1806 int *memo,
int verbose_level)
1809 int f_v = (verbose_level >= 1);
1810 int f_vv = (verbose_level >= 2);
1818 for (j = 0; j < n; j++) {
1819 for (l = 0; l < k; l++) {
1834 cout <<
"Hall test fails for " << k <<
"-set ";
1836 cout <<
" c=" << c <<
" n=" << n << endl;
1839 for (l = 0; l < k; l++) {
1841 for (j = 0; j < n; j++) {
1859 ostream &ost,
int *A,
int m,
int n)
1863 for (i = 0; i < m; i++) {
1864 for (j = 0; j < n; j++) {
1877 ostream &ost,
int *A,
int m,
int n)
1881 for (i = 0; i < m; i++) {
1882 for (j = 0; j < n; j++) {
1883 ost << A[i * n + j] <<
" ";
1892 int i, j, k, j1, j2, j3, j4, n;
1894 int L[4], P[4], sgn;
1895 int one, m_one, half, quarter, c, c2;
1896 int a, b, m_a, m_b, m_half;
1903 for (c = 1; c < F->
q; c++) {
1910 cout <<
"create_roots_H4: the field of order " << F->
q
1911 <<
" does not contain a square root of 5" << endl;
1916 a = F->
mult(F->
add(1, c), quarter);
1917 b = F->
mult(F->
add(m_one, c), quarter);
1920 m_half = F->
negate(half);
1921 cout <<
"a=" << a << endl;
1922 cout <<
"b=" << b << endl;
1923 cout <<
"c=" << c << endl;
1928 for (i = 0; i < 4; i++) {
1929 for (j = 0; j < 2; j++) {
1930 for (k = 0; k < 4; k++) {
1939 for (k = 0; k < 4; k++) {
1940 roots[n * 4 + k] = v[k];
1948 for (j1 = 0; j1 < 2; j1++) {
1949 for (j2 = 0; j2 < 2; j2++) {
1950 for (j3 = 0; j3 < 2; j3++) {
1951 for (j4 = 0; j4 < 2; j4++) {
1953 for (k = 0; k < 4; k++) {
1972 for (k = 0; k < 4; k++) {
1973 roots[n * 4 + k] = F->
mult(half, v[k]);
1983 for (j1 = 0; j1 < 2; j1++) {
1984 for (j2 = 0; j2 < 2; j2++) {
1985 for (j3 = 0; j3 < 2; j3++) {
1986 for (k = 0; k < 4; k++) {
2012 for (k = 0; k < 4; k++) {
2013 roots[n * 4 + k] = v[P[k]];
2030 long int a, b, c, a1, b1, c1, d, e, g;
2033 if (n == k || k == 0) {
2055 cout <<
"error in generalized_binomial b != 1" << endl;
2062 cout <<
"error in generalized_binomial e * b != d" << endl;
2069 int *row_parts,
int *col_parts)
2073 for (i = 0; i < l1; i++) {
2075 for (j = 0; j < a; j++) {
2076 b = Tableau[i * l2 + j];
2077 cout << setw(3) << b <<
" ";
2104 for (b = 1; ; b++) {
2119 for (b = 1; ; b++) {
2136 return (a >> 1) * (a - 1);
2139 return a * (a >> 1);
2151 return (a / 6) * (a - 1) * (a - 2);
2154 return a * ((a - 1) / 6) * (a - 2);
2157 return a * (a - 1) * ((a - 2) / 6);
2160 return (a / 3) * ((a - 1) >> 1) * (a - 2);
2163 return (a >> 1) * ((a - 1) / 3) * (a - 2);
2166 return a * ((a - 1) >> 1) * ((a - 2) / 3);
2168 cout <<
"error in binomial3" << endl;
2205 cout <<
"make_partitions cnt1 != cnt" << endl;
2242 for (i = 2; i <= n; i++) {
2252 for (j = i - 1; j >= 1; j--) {
2261#define TABLE_BINOMIALS_MAX 1000
2263static ring_theory::longinteger_object *tab_binomials = NULL;
2264static int tab_binomials_size = 0;
2278 int f_v = (verbose_level >= 1);
2284 cout <<
"combinatorics_domain::binomial "
2285 "n=" << n <<
" k=" << k << endl;
2287 if (k < 0 || k > n) {
2288 a.
create(0, __FILE__, __LINE__);
2292 a.
create(1, __FILE__, __LINE__);
2296 a.
create(1, __FILE__, __LINE__);
2301 cout <<
"combinatorics_domain::binomial using table" << endl;
2307 binomial(b, n, k - 1, verbose_level);
2309 c.
create(n - k + 1, __FILE__, __LINE__);
2313 cout <<
"combinatorics_domain::binomial k != 0" << endl;
2317 cout <<
"combinatorics_domain::binomial "
2318 "n=" << n <<
" k=" << k <<
" done" << endl;
2327 if (k < 0 || k > n) {
2328 a.
create(0, __FILE__, __LINE__);
2332 a.
create(1, __FILE__, __LINE__);
2336 a.
create(1, __FILE__, __LINE__);
2341 if (n >= tab_binomials_size) {
2346 for (i = 0; i < tab_binomials_size; i++) {
2347 for (j = 0; j <= i; j++) {
2348 tab_binomials[i * tab_binomials_size +
2349 j].
swap_with(tab_binomials2[i * (n + 1) + j]);
2352 for ( ; i <= n; i++) {
2353 for (j = 0; j <= i; j++) {
2354 tab_binomials2[i * (n + 1) + j].create(0, __FILE__, __LINE__);
2357 if (tab_binomials) {
2360 tab_binomials = tab_binomials2;
2361 tab_binomials_size = n + 1;
2363 for (i = 0; i < tab_binomials_size; i++) {
2364 for (j = 0; j <= i; j++) {
2365 tab_binomials2[i * (n + 1) + j].print(cout);
2373 if (tab_binomials[n * tab_binomials_size + k].is_zero()) {
2382 c.
create(n - k + 1, __FILE__, __LINE__);
2386 cout <<
"combinatorics_domain::binomial_with_table k != 0" << endl;
2389 a.
assign_to(tab_binomials[n * tab_binomials_size + k]);
2397 tab_binomials[n * tab_binomials_size + k].
assign_to(a);
2409 for (i = 1; i <= n; i++) {
2411 c.
create(1, __FILE__, __LINE__);
2412 for (j = 0; j < ai; j++) {
2415 for (j = 1; j <= ai; j++) {
2425#define TABLE_Q_BINOMIALS_MAX 200
2428static ring_theory::longinteger_object *tab_q_binomials = NULL;
2429static int tab_q_binomials_size = 0;
2430static int tab_q_binomials_q = 0;
2434 int n,
int k,
int q,
int verbose_level)
2441 if (k < 0 || k > n) {
2442 a.
create(0, __FILE__, __LINE__);
2446 a.
create(1, __FILE__, __LINE__);
2450 a.
create(1, __FILE__, __LINE__);
2455 if (n >= tab_q_binomials_size) {
2456 if (tab_q_binomials_size > 0 && q != tab_q_binomials_q) {
2462 cout <<
"tab_q_binomials_size > 0 && q != tab_q_binomials_q" << endl;
2463 cout <<
"q=" << q << endl;
2464 cout <<
"tab_q_binomials_q=" << tab_q_binomials_q << endl;
2469 tab_q_binomials_q = q;
2475 for (i = 0; i < tab_q_binomials_size; i++) {
2476 for (j = 0; j <= i; j++) {
2477 tab_q_binomials[i * tab_q_binomials_size +
2478 j].
swap_with(tab_q_binomials2[i * (n + 1) + j]);
2481 for ( ; i <= n; i++) {
2482 for (j = 0; j <= i; j++) {
2483 tab_q_binomials2[i * (n + 1) + j].create(0, __FILE__, __LINE__);
2486 if (tab_q_binomials) {
2489 tab_q_binomials = tab_q_binomials2;
2490 tab_q_binomials_size = n + 1;
2492 for (i = 0; i < tab_q_binomials_size; i++) {
2493 for (j = 0; j <= i; j++) {
2494 tab_q_binomials2[i * (n + 1) + j].print(cout);
2502 if (tab_q_binomials[n * tab_q_binomials_size + k].is_zero()) {
2505 a.
assign_to(tab_q_binomials[n * tab_q_binomials_size + k]);
2513 tab_q_binomials[n * tab_q_binomials_size + k].
assign_to(a);
2520 int n,
int k,
int q,
int verbose_level)
2522 int f_v = (verbose_level >= 1);
2526 cout <<
"combinatorics_domain::q_binomial "
2527 "n=" << n <<
" k=" << k <<
" q=" << q << endl;
2529 if (k < 0 || k > n) {
2530 a.
create(0, __FILE__, __LINE__);
2534 a.
create(1, __FILE__, __LINE__);
2538 a.
create(1, __FILE__, __LINE__);
2550 cout <<
"combinatorics_domain::q_binomial "
2551 "n=" << n <<
" k=" << k <<
" q=" << q
2552 <<
" yields " << a << endl;
2558 int n,
int k,
int q,
int verbose_level)
2560 int f_v = (verbose_level >= 1);
2565 cout <<
"combinatorics_domain::q_binomial_no_table "
2566 "n=" << n <<
" k=" << k <<
" q=" << q << endl;
2568 if (k < 0 || k > n) {
2569 a.
create(0, __FILE__, __LINE__);
2573 a.
create(1, __FILE__, __LINE__);
2577 a.
create(1, __FILE__, __LINE__);
2586 cout <<
"combinatorics_domain::q_binomial_no_table "
2587 "remainder is not zero" << endl;
2588 cout <<
"q=" << q << endl;
2589 cout <<
"n-1=" << n-1 << endl;
2590 cout <<
"k-1=" << k-1 << endl;
2591 cout <<
"top=" << top << endl;
2592 cout <<
"bottom=" << bottom << endl;
2596 cout <<
"combinatorics_domain::q_binomial_no_table "
2597 "n=" << n <<
" k=" << k <<
" q=" << q
2598 <<
" yields " << a << endl;
2604static int *tab_krawtchouk_entry_computed = NULL;
2605static int tab_krawtchouk_size = 0;
2606static int tab_krawtchouk_n = 0;
2607static int tab_krawtchouk_q = 0;
2610 int n,
int q,
int k,
int x)
2615 if (tab_krawtchouk_size) {
2616 if (n != tab_krawtchouk_n || q != tab_krawtchouk_q) {
2617 delete [] tab_krawtchouk;
2618 FREE_int(tab_krawtchouk_entry_computed);
2619 tab_krawtchouk_size = 0;
2620 tab_krawtchouk_n = 0;
2621 tab_krawtchouk_q = 0;
2626 if (kx >= tab_krawtchouk_size) {
2632 int *tab_krawtchouk_entry_computed2 =
NEW_int(kx * kx);
2633 for (i = 0; i < kx; i++) {
2634 for (j = 0; j < kx; j++) {
2635 tab_krawtchouk_entry_computed2[i * kx + j] =
FALSE;
2636 tab_krawtchouk2[i * kx + j].
create(0, __FILE__, __LINE__);
2639 for (i = 0; i < tab_krawtchouk_size; i++) {
2640 for (j = 0; j < tab_krawtchouk_size; j++) {
2641 tab_krawtchouk[i * tab_krawtchouk_size + j
2642 ].
swap_with(tab_krawtchouk2[i * kx + j]);
2643 tab_krawtchouk_entry_computed2[i * kx + j] =
2644 tab_krawtchouk_entry_computed[
2645 i * tab_krawtchouk_size + j];
2648 if (tab_krawtchouk) {
2651 if (tab_krawtchouk_entry_computed) {
2652 FREE_int(tab_krawtchouk_entry_computed);
2654 tab_krawtchouk = tab_krawtchouk2;
2655 tab_krawtchouk_entry_computed = tab_krawtchouk_entry_computed2;
2656 tab_krawtchouk_size = kx;
2657 tab_krawtchouk_n = n;
2658 tab_krawtchouk_q = q;
2660 for (i = 0; i < tab_krawtchouk_size; i++) {
2661 for (j = 0; j < tab_krawtchouk_size; j++) {
2662 tab_krawtchouk[i * tab_krawtchouk_size + j].
print(cout);
2670 if (!tab_krawtchouk_entry_computed[k * tab_krawtchouk_size + x]) {
2674 cout <<
"combinatorics_domain::krawtchouk_with_table x < 0" << endl;
2678 cout <<
"combinatorics_domain::krawtchouk_with_table k < 0" << endl;
2684 b.
create(q - 1, __FILE__, __LINE__);
2686 D.
mult(n_choose_k, b, a);
2693 a.
create(1, __FILE__, __LINE__);
2698 c.
create(-q + 1, __FILE__, __LINE__);
2707 d.
create(-1, __FILE__, __LINE__);
2721 a.
assign_to(tab_krawtchouk[k * tab_krawtchouk_size + x]);
2722 tab_krawtchouk_entry_computed[
2723 k * tab_krawtchouk_size + x] =
TRUE;
2727 tab_krawtchouk[k * tab_krawtchouk_size + x].
assign_to(a);
2732 int n,
int q,
int k,
int x)
2741 int f_v = (verbose_level >= 1);
2744 cout <<
"combinatorics_domain::do_tdo_refinement" << endl;
2751 R->
init(Descr, verbose_level);
2757 cout <<
"combinatorics_domain::do_tdo_refinement done" << endl;
2763 int f_v = (verbose_level >= 1);
2764 int f_vv = (verbose_level >= 2);
2769 int f_widor =
FALSE;
2773 cout <<
"combinatorics_domain::do_tdo_print" << endl;
2776 cout <<
"opening file " << fname <<
" for reading" << endl;
2785 get_extension_if_present(str, ext);
2786 chop_off_extension_if_present(str, ext);
2790 sprintf(fname_out,
"%sw.tdo", str);
2792 g =
new ofstream(fname_out);
2795 texfile =
new ofstream(texfile_name);
2808 if (f_intersection) {
2814 for (cnt = 0; ; cnt++) {
2816 cout <<
"eof reached" << endl;
2838 if (cnt < range_first || cnt >= range_first + range_len)
2842 if (strcmp(GP.
label, select_label))
2860 cout <<
"before init_tdo_scheme" << endl;
2864 cout <<
"after init_tdo_scheme" << endl;
2889 sprintf(fname,
"%s.tex", GP.
label);
2895 if (f_intersection) {
2897 intersection_of_columns(GP, G,
2898 intersection_j1, intersection_j2, V, M, verbose_level - 1);
2902 cout <<
"vm:" << vm << endl;
2905 if (VM.search(vm, &idx)) {
2906 VM_mult.m_ii(idx, VM_mult.s_ii(idx) + 1);
2909 cout <<
"inserting at position " << idx << endl;
2910 VM.insert_element(idx, vm);
2911 VM_mult.insert_element(idx, mu);
2923 *g <<
"-1 " << nb_written << endl;
2932 if (f_intersection) {
2934 cout <<
"the intersection types are:" << endl;
2935 for (i = 0; i < VM.s_l(); i++) {
2937 cout <<
"intersection type " << i + 1 <<
":" << endl;
2938 Vector &V = VM.s_i(i).as_vector().s_i(0).as_vector();
2939 Vector &M = VM.s_i(i).as_vector().s_i(1).as_vector();
2943 for (c = 0; c < cl; c++) {
2944 Vector &Vc = V.s_i(c).as_vector();
2945 Vector &Mc = M.s_i(c).as_vector();
2948 for (j = 0; j < l; j++) {
2949 Vector &the_type = Vc.s_i(j).as_vector();
2950 int mult = Mc.s_ii(j);
2951 cout << setw(5) << mult <<
" x " << the_type << endl;
2953 cout <<
"--------------------------" << endl;
2955 cout <<
"appears " << setw(5) << VM_mult.s_ii(i) <<
" times" << endl;
2959 int f_second =
FALSE;
2961 int pencil_data_size = 0;
2964 C =
new classify[cl];
2965 C_pencil =
new classify;
2967 for (c = 0; c < cl; c++) {
2968 Vector &Vc = V.s_i(c).as_vector();
2969 Vector &Mc = M.s_i(c).as_vector();
2973 for (j = 0; j < l; j++) {
2974 Vector &the_type = Vc.s_i(j).as_vector();
2975 int mult = Mc.s_ii(j);
2976 if (the_type.s_ii(1) == 1 && the_type.s_ii(0)) {
2977 pencil_data_size += mult;
2982 pencil_data =
new int[pencil_data_size];
2985 for (c = 0; c < cl; c++) {
2986 Vector &Vc = V.s_i(c).as_vector();
2987 Vector &Mc = M.s_i(c).as_vector();
2991 for (j = 0; j < l; j++) {
2992 Vector &the_type = Vc.s_i(j).as_vector();
2993 int mult = Mc.s_ii(j);
2994 if (the_type.s_ii(1) == 1 && the_type.s_ii(0)) {
2995 b = the_type.s_ii(0);
2996 for (hh = 0; hh < mult; hh++) {
2997 pencil_data[pos++] = b;
3005 C_pencil->init(pencil_data, pencil_data_size,
FALSE , verbose_level - 2);
3006 delete [] pencil_data;
3008 for (c = 0; c < cl; c++) {
3009 Vector &Vc = V.s_i(c).as_vector();
3010 Vector &Mc = M.s_i(c).as_vector();
3014 for (j = 0; j < l; j++) {
3015 Vector &the_type = Vc.s_i(j).as_vector();
3016 if (the_type.s_ii(1))
3018 int mult = Mc.s_ii(j);
3026 for (j = 0; j < l; j++) {
3027 Vector &the_type = Vc.s_i(j).as_vector();
3028 int mult = Mc.s_ii(j);
3029 if (the_type.s_ii(1))
3031 a = the_type.s_ii(0);
3032 for (h = 0; h < mult; h++) {
3039 C[c].init(data, L, f_second, verbose_level - 2);
3043 cout <<
"Intersection type " << i + 1 <<
": pencil type: (";
3044 C_pencil->print_naked(
FALSE );
3046 cout <<
"intersection type: (";
3047 for (c = 0; c < cl; c++) {
3048 C[c].print_naked(
FALSE );
3052 cout <<
") appears " << VM_mult.s_ii(i) <<
" times" << endl;
3061 cout <<
"combinatorics_domain::do_tdo_print done" << endl;
3067 int f_v = (verbose_level >= 1);
3070 cout <<
"combinatorics_domain::make_elementary_symmetric_function" << endl;
3079 for (k = 1; k <= k_max; k++) {
3080 cout <<
"k=" << k <<
" : " << endl;
3090 for (j = 0; j < k; j++) {
3091 cout <<
"x" << set[j];
3105 cout <<
"combinatorics_domain::make_elementary_symmetric_functions done" << endl;
3112 int f_v = (verbose_level >= 1);
3115 cout <<
"combinatorics_domain::Dedekind_numbers" << endl;
3121 snprintf(str, 1000,
"Dedekind_%d_%d_%d_%d.csv", n_min, n_max, q_min, q_max);
3126 ofstream ost(fname);
3129 cout <<
"combinatorics_domain::Dedekind_numbers writing csv file" << endl;
3138 for (q = q_min; q <= q_max; q++) {
3142 for (n = n_min; n <= n_max; n++) {
3144 for (q = q_min; q <= q_max; q++) {
3147 cout <<
"computing n=" << n <<
" q=" << q << endl;
3153 ost <<
"END" << endl;
3156 cout <<
"combinatorics_domain::Dedekind_numbers writing csv file" << endl;
3163 cout <<
"combinatorics_domain::Dedekind_numbers written file " << fname <<
" of size "
3171 cout <<
"combinatorics_domain::Dedekind_numbers done" << endl;
3179 int f_v = (verbose_level >= 1);
3180 int f_vv = (verbose_level >= 2);
3188 cout <<
"combinatorics_domain::convert_stack_to_tdo" << endl;
3190 fname.assign(stack_fname);
3192 fname_out.assign(fname);
3193 fname_out.append(
".tdo");
3196 cout <<
"reading stack file " << stack_fname << endl;
3201 ifstream f(stack_fname);
3202 ofstream g(fname_out);
3203 for (i = 0; ; i++) {
3206 cout <<
"end of file reached" << endl;
3212 cout <<
"GP.input returns false" << endl;
3217 cout <<
"read decomposition " << i
3218 <<
" v=" << GP.
v <<
" b=" << GP.
b << endl;
3222 cout <<
"after convert_single_to_stack" << endl;
3224 if (strlen(GP.
label.c_str())) {
3231 sprintf(str,
"%d", i);
3237 cout <<
"after write" << endl;
3241 cout <<
"after init_tdo_scheme" << endl;
3247 g <<
"-1 " << i << endl;
3251 cout <<
"written file " << fname_out <<
" of size " << Fio.
file_size(fname_out) << endl;
3252 cout <<
"combinatorics_domain::convert_stack_to_tdo done" << endl;
3258 int f_v = (verbose_level >= 1);
3260 int v[2], b[2], aij[4];
3266 cout <<
"combinatorics_domain::do_parameters_maximal_arc q=" << q <<
" r=" << r << endl;
3270 v[0] = q * (r - 1) + r;
3271 v[1] = Q + q * (2 - r) - r + 1;
3272 b[0] = Q - Q / r + q * 2 - q / r + 1;
3273 b[1] = Q / r + q / r - q;
3276 aij[2] = q - q / r + 1;
3278 snprintf(fname, 1000,
"max_arc_q%d_r%d.stack", q, r);
3285 int f_v = (verbose_level >= 1);
3287 int v[2], b[1], aij[2];
3292 cout <<
"combinatorics_domain::do_parameters_maximal_arc q=" << q <<
" s=" << s <<
" r=" << r << endl;
3296 v[1] = q * q + q + 1 - s;
3297 b[0] = q * q + q + 1;
3300 snprintf(fname, 1000,
"arc_q%d_s%d_r%d.stack", q, s, r);
3306 int f_grouping,
double x_stretch,
int verbose_level)
3310 int f_v = (verbose_level >= 1);
3314 cout <<
"interface_combinatorics::do_read_poset_file" << endl;
3326 fname_out.assign(fname);
3333 cout <<
"Written file " << fname_out <<
" of size "
3339 cout <<
"combinatorics_domain::do_read_poset_file done" << endl;
3346 int f_v = (verbose_level >= 1);
3349 cout <<
"combinatorics_domain::do_make_tree_of_all_k_subsets" << endl;
3359 snprintf(fname, 1000,
"all_k_subsets_%d_%d.tree", n, k);
3367 for (h = 0; h < N; h++) {
3370 for (i = 0; i < k; i++) {
3371 fp <<
" " << set[i];
3380 cout <<
"combinatorics_domain::do_make_tree_of_all_k_subsets done" << endl;
3385 std::string &fname_csv,
int verbose_level)
3387 int f_v = (verbose_level >= 1);
3390 cout <<
"combinatorics_domain::create_random_permutation" << endl;
3408 cout <<
"combinatorics_domain::create_random_permutation done" << endl;
3413 int *&M,
int verbose_level)
3415 int f_v = (verbose_level >= 1);
3418 cout <<
"combinatorics_domain::compute_incidence_matrix" << endl;
3427 for (j = 0; j < b; j++) {
3429 for (h = 0; h < k; h++) {
3437 cout <<
"combinatorics_domain::compute_incidence_matrix done" << endl;
3442 int *&Blocks,
int verbose_level)
3444 int f_v = (verbose_level >= 1);
3447 cout <<
"combinatorics_domain::compute_blocks" << endl;
3453 for (j = 0; j < b; j++) {
3458 cout <<
"combinatorics_domain::compute_blocks done" << endl;
3463 int v,
int k,
int b,
long int *Blocks_coded,
3467 int f_v = (verbose_level >= 1);
3470 cout <<
"combinatorics_domain::refine_the_partition" << endl;
3506 cout <<
"combinatorics_domain::refine_the_partition before refine_column_partition_safe" << endl;
3510 cout <<
"combinatorics_domain::refine_the_partition after refine_column_partition_safe" << endl;
3513 cout <<
"combinatorics_domain::refine_the_partition before refine_row_partition_safe" << endl;
3517 cout <<
"combinatorics_domain::refine_the_partition after refine_row_partition_safe" << endl;
3525 int f_labeled =
TRUE;
3532 int f_print_subscripts =
FALSE;
3534 cout <<
"Decomposition:\\\\" << endl;
3535 cout <<
"Row scheme:\\\\" << endl;
3538 f_print_subscripts, *Stack);
3539 cout <<
"Column scheme:\\\\" << endl;
3542 f_print_subscripts, *Stack);
3550 cout <<
"Row classes:\\\\" << endl;
3557 cout <<
"Col classes:\\\\" << endl;
3561 if (Row_classes->
nb_sets > 1) {
3563 cout <<
"combinatorics_domain::refine_the_partition The row partition splits" << endl;
3567 if (Col_classes->
nb_sets > 1) {
3569 cout <<
"combinatorics_domain::refine_the_partition The col partition splits" << endl;
3577 b_reduced = Col_classes->
Set_size[idx];
3579 for (j = 0; j < b_reduced; j++) {
3580 a = Col_classes->
Sets[idx][j];
3581 Blocks_coded[j] = Blocks_coded[a];
3584 cout <<
"combinatorics_domain::refine_the_partition reducing from " << b <<
" down to " << b_reduced << endl;
3589 cout <<
"combinatorics_domain::refine_the_partition The col partition does not split" << endl;
3605 cout <<
"combinatorics_domain::refine_the_partition done" << endl;
3612 int *&M,
int &nb_rows,
int &nb_cols,
3615 int f_v = (verbose_level >= 1);
3619 cout <<
"combinatorics_domain::create_incidence_matrix_of_graph" << endl;
3623 for (i = 0; i < n; i++) {
3624 for (j = i + 1; j < n; j++) {
3625 if (Adj[i * n + j]) {
3633 for (i = 0; i < n; i++) {
3634 for (j = i + 1; j < n; j++) {
3635 if (Adj[i * n + j]) {
3636 M[i * nb_cols + u] = 1;
3637 M[j * nb_cols + u] = 1;
3643 cout <<
"combinatorics_domain::create_incidence_matrix_of_graph done" << endl;
3651 int verbose_level = 0;
3652 int f_v = (verbose_level >= 1);
3655 cout <<
"combinatorics_domain::free_global_data" << endl;
3657 if (tab_binomials) {
3659 cout <<
"combinatorics_domain::free_global_data before "
3660 "FREE_OBJECTS(tab_binomials)" << endl;
3664 cout <<
"combinatorics_domain::free_global_data after "
3665 "FREE_OBJECTS(tab_binomials)" << endl;
3667 tab_binomials = NULL;
3668 tab_binomials_size = 0;
3670 if (tab_q_binomials) {
3672 cout <<
"combinatorics_domain::free_global_data before "
3673 "FREE_OBJECTS(tab_q_binomials)" << endl;
3677 cout <<
"combinatorics_domain::free_global_data after "
3678 "FREE_OBJECTS(tab_q_binomials)" << endl;
3680 tab_q_binomials = NULL;
3681 tab_q_binomials_size = 0;
3684 cout <<
"combinatorics_domain::free_global_data done" << endl;
3690 if (tab_q_binomials) {
3692 tab_q_binomials = NULL;
a collection of combinatorial functions
void size_of_conjugacy_class_in_sym_n(ring_theory::longinteger_object &a, int n, int *part)
int philip_hall_test(int *A, int n, int k, int *memo, int verbose_level)
void set_delete_element(int *elts, int &size, int a)
void subset_permute_up_front(int n, int k, int *set, int *k_subset_idx, int *permuted_set)
void q_binomial_with_table(ring_theory::longinteger_object &a, int n, int k, int q, int verbose_level)
void unrank_subset(int *set, int &sz, int n, int r)
int disjoint_binary_representation(int u, int v)
void create_incidence_matrix_of_graph(int *Adj, int n, int *&M, int &nb_rows, int &nb_cols, int verbose_level)
long int ij2k_lint(long int i, long int j, long int n)
void binomial(ring_theory::longinteger_object &a, int n, int k, int verbose_level)
int is_permutation(int *perm, long int n)
void perm_print_with_print_point_function(std::ostream &ost, int *a, int n, void(*point_label)(std::stringstream &sstr, long int pt, void *data), void *point_label_data)
int unordered_triple_pair_rank(int i, int j, int k, int l, int m, int n)
int compare_lexicographically(int a_len, long int *a, int b_len, long int *b)
void ordered_pair_unrank(int rk, int &i, int &j, int n)
void perm_print_offset(std::ostream &ost, int *a, int n, int offset, int f_print_cycles_of_length_one, int f_cycle_length, int f_max_cycle_length, int max_cycle_length, int f_orbit_structure, void(*point_label)(std::stringstream &sstr, long int pt, void *data), void *point_label_data)
int next_lehmercode(int n, int *v)
int first_k_subset(int *set, int n, int k)
void do_parameters_arc(int q, int s, int r, int verbose_level)
void perm_inverse(int *a, int *b, long int n)
int is_subset_of(int *A, int sz_A, int *B, int sz_B)
void binomial_with_table(ring_theory::longinteger_object &a, int n, int k)
void unrank_subset_recursion(int *set, int &sz, int n, int a0, int &r)
void make_partitions(int n, int *Part, int cnt)
void set_complement_lint(long int *subset, int subset_size, long int *complement, int &size_complement, int universal_set_size)
int minus_one_if_positive(int i)
int partition_first(int *v, int n)
void unrank_k_subset(int rk, int *set, int n, int k)
long int binomial3(int a)
int rank_subset(int *set, int sz, int n)
void do_tdo_print(std::string &fname, int verbose_level)
int rank_k_subset(int *set, int n, int k)
void make_elementary_symmetric_functions(int n, int k_max, int verbose_level)
void q_binomial_no_table(ring_theory::longinteger_object &a, int n, int k, int q, int verbose_level)
int create_roots_H4(field_theory::finite_field *F, int *roots)
void k2ij(int k, int &i, int &j, int n)
long int generalized_binomial(int n, int k, int q)
int ordered_pair_rank(int i, int j, int n)
int f_is_subset_of(int v, int t, int k, int rk_t_subset, int rk_k_subset)
int set_find(int *elts, int size, int a)
void set_complement_safe(int *subset, int subset_size, int *complement, int &size_complement, int universal_set_size)
int next_k_subset_at_level(int *set, int n, int k, int backtrack_level)
void perm_raise(int *a, int *b, int e, long int n)
void print_tableau(int *Tableau, int l1, int l2, int *row_parts, int *col_parts)
void do_tdo_refinement(tdo_refinement_description *Descr, int verbose_level)
void do_read_poset_file(std::string &fname, int f_grouping, double x_stretch, int verbose_level)
int int_vec_first_regular_word(int *v, int len, int q)
void set_add_element(int *elts, int &size, int a)
void perm_print_product_action(std::ostream &ost, int *a, int m_plus_n, int m, int offset, int f_cycle_length)
int partition_next(int *v, int n)
void partition_print(std::ostream &ost, int *v, int n)
void perm_conjugate(int *a, int *b, int *c, long int n)
void perm_print_counting_from_one(std::ostream &ost, int *a, int n)
void print_01_matrix_with_stars(std::ostream &ost, int *A, int m, int n)
int count_all_partitions_of_n(int n)
int perm_is_identity(int *a, long int n)
void random_permutation(int *random_permutation, long int n)
void unordered_triple_pair_unrank(int rk, int &i, int &j, int &k, int &l, int &m, int &n)
void krawtchouk_with_table(ring_theory::longinteger_object &a, int n, int q, int k, int x)
void perm_cycle_type(int *perm, long int degree, int *cycles, int &nb_cycles)
int set_partition_4_into_2_rank(int *v)
int philip_hall_test_dual(int *A, int n, int k, int *memo, int verbose_level)
void first_lehmercode(int n, int *v)
long int int_n_choose_k(int n, int k)
void perm_print_list_offset(std::ostream &ost, int *a, int n, int offset)
void convert_stack_to_tdo(std::string &stack_fname, int verbose_level)
void do_make_tree_of_all_k_subsets(int n, int k, int verbose_level)
void Dedekind_numbers(int n_min, int n_max, int q_min, int q_max, int verbose_level)
void set_delete_elements(int *elts, int &size, int *elts_to_delete, int nb_elts_to_delete)
void create_random_permutation(int deg, std::string &fname_csv, int verbose_level)
int is_permutation_lint(long int *perm, long int n)
void perm_direct_product(long int n1, long int n2, int *perm1, int *perm2, int *perm3)
void ijk_unrank(int &i, int &j, int &k, int n, int rk)
int int_vec_is_regular_word(int *v, int len, int q)
void int_vec_splice(int *v, int *w, int len, int p)
void perm_move(int *from, int *to, long int n)
int int_vec_next_regular_word(int *v, int len, int q)
void partition_dual(int *part, int *dual_part, int n, int verbose_level)
void perm_print_with_cycle_length(std::ostream &ost, int *a, int n)
void do_parameters_maximal_arc(int q, int r, int verbose_level)
void krawtchouk(ring_theory::longinteger_object &a, int n, int q, int k, int x)
void perm_print_list(std::ostream &ost, int *a, int n)
void compute_blocks(int v, int b, int k, long int *Blocks_coded, int *&Blocks, int verbose_level)
void set_complement(int *subset, int subset_size, int *complement, int &size_complement, int universal_set_size)
void free_tab_q_binomials()
int hall_test(int *A, int n, int kmax, int *memo, int verbose_level)
void make_t_k_incidence_matrix(int v, int t, int k, int &m, int &n, int *&M, int verbose_level)
long int largest_binomial2_below(int a2)
void perm_mult(int *a, int *b, int *c, long int n)
int perm_signum(int *perm, long int n)
int ijk_rank(int i, int j, int k, int n)
int perm_order(int *a, long int n)
int ijk2h(int i, int j, int k, int n)
void unrank_k_subset_and_complement(int rk, int *set, int n, int k)
void perm_print(std::ostream &ost, int *a, int n)
int ij2k(int i, int j, int n)
void set_add_elements(int *elts, int &size, int *elts_to_add, int nb_elts_to_add)
void h2ijk(int h, int &i, int &j, int &k, int n)
void make_all_partitions_of_n(int n, int *&Table, int &nb, int verbose_level)
void refine_the_partition(int v, int k, int b, long int *Blocks_coded, int &b_reduced, int verbose_level)
void rank_subset_recursion(int *set, int sz, int n, int a0, int &r)
void q_binomial(ring_theory::longinteger_object &a, int n, int k, int q, int verbose_level)
long int largest_binomial3_below(int a3)
long int binomial2(int a)
int count_partitions(int n)
int next_k_subset(int *set, int n, int k)
void print_int_matrix(std::ostream &ost, int *A, int m, int n)
int Kung_mue_i(int *part, int i, int m)
void perm_identity(int *a, long int n)
void k2ij_lint(long int k, long int &i, long int &j, long int n)
int next_partition(int n, int *part)
void set_partition_4_into_2_unrank(int rk, int *v)
void compute_incidence_matrix(int v, int b, int k, long int *Blocks_coded, int *&M, int verbose_level)
long int binomial_lint(int n, int k)
void perm_elementary_transposition(int *a, long int n, int f)
void print_k_subsets_by_rank(std::ostream &ost, int v, int k)
void lehmercode_to_permutation(int n, int *code, int *perm)
decomposition stack of a linear space or incidence geometry
void write(std::ofstream &aStream, std::string &label)
void convert_single_to_stack(int verbose_level)
void write_mode_stack(std::ofstream &aStream, std::string &label)
int input(std::ifstream &aStream)
void print_schemes(tdo_scheme_synthetic &G)
int input_mode_stack(std::ifstream &aStream, int verbose_level)
void print_scheme_tex(std::ostream &ost, tdo_scheme_synthetic &G, int h)
void init_tdo_scheme(tdo_scheme_synthetic &G, int verbose_level)
refinement of the parameters of a linear space
refinement of the parameters of a linear space
void init(tdo_refinement_description *Descr, int verbose_level)
void main_loop(int verbose_level)
canonical tactical decomposition of an incidence structure
void set_print(std::ostream &ost, int *v, int len)
data structure for set partitions following Jeffrey Leon
void get_column_classes(set_of_sets *&Sos, int verbose_level)
void allocate_with_two_classes(int n, int v, int b, int verbose_level)
void get_row_classes(set_of_sets *&Sos, int verbose_level)
void print_classes(std::ostream &ost)
int find_smallest_class()
void print_table_tex(std::ostream &ost)
a collection of functions related to sorted vectors
int int_vec_search(int *v, int len, int a, int &idx)
void int_vec_heapsort(int *v, int len)
void lint_vec_heapsort(long int *v, int len)
a statistical analysis of data consisting of single integers
void init(int *data, int data_length, int f_second, int verbose_level)
void print_naked(int f_backwards)
various functions related to geometries
void AG_element_unrank(int q, int *v, int stride, int len, long int a)
int AG_element_next(int q, int *v, int stride, int len)
long int AG_element_rank(int q, int *v, int stride, int len)
interface for various incidence geometries
void get_and_print_row_tactical_decomposition_scheme_tex(std::ostream &ost, int f_enter_math, int f_print_subscripts, data_structures::partitionstack &PStack)
int refine_row_partition_safe(data_structures::partitionstack &PStack, int verbose_level)
void get_and_print_decomposition_schemes(data_structures::partitionstack &PStack)
int refine_column_partition_safe(data_structures::partitionstack &PStack, int verbose_level)
void get_and_print_column_tactical_decomposition_scheme_tex(std::ostream &ost, int f_enter_math, int f_print_subscripts, data_structures::partitionstack &PStack)
void print_partitioned(std::ostream &ost, data_structures::partitionstack &P, int f_labeled)
void init_by_matrix(int m, int n, int *M, int verbose_level)
a data structure to store layered graphs or Hasse diagrams
void init_poset_from_file(std::string &fname, int f_grouping, double x_stretch, int verbose_level)
void write_file(std::string &fname, int verbose_level)
basic number theoretic functions
long int gcd_lint(long int m, long int n)
int i_power_j(int i, int j)
long int i_power_j_lint(long int i, long int j)
a collection of functions related to file io
void int_vec_write_csv(int *v, int len, std::string &fname, const char *label)
long int file_size(std::string &fname)
void write_decomposition_stack(char *fname, int m, int n, int *v, int *b, int *aij, int verbose_level)
data_structures::int_vec * Int_vec
interface to system functions
int random_integer(int p)
domain to compute with objects of type longinteger
void integral_division_exact(longinteger_object &a, longinteger_object &b, longinteger_object &a_over_b)
void add(longinteger_object &a, longinteger_object &b, longinteger_object &c)
void integral_division_by_int(longinteger_object &a, int b, longinteger_object &q, int &r)
void mult(longinteger_object &a, longinteger_object &b, longinteger_object &c)
void create_qnm1(longinteger_object &a, int q, int n)
void integral_division(longinteger_object &a, longinteger_object &b, longinteger_object &q, longinteger_object &r, int verbose_level)
void power_int(longinteger_object &a, int n)
void Dedekind_number(longinteger_object &Dnq, int n, int q, int verbose_level)
void mult_integer_in_place(longinteger_object &a, int b)
void factorial(longinteger_object &result, int n)
a class to represent arbitrary precision integers
void assign_to(longinteger_object &b)
std::ostream & print(std::ostream &ost)
void create(long int i, const char *file, int line)
void swap_with(longinteger_object &b)
#define TABLE_Q_BINOMIALS_MAX
#define TABLE_BINOMIALS_MAX
#define Lint_vec_copy(A, B, C)
#define Int_vec_zero(A, B)
#define NEW_OBJECTS(type, n)
#define Int_vec_copy(A, B, C)
#define Int_vec_print(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects