17namespace layer1_foundations {
18namespace ring_theory {
49 for (i = l - 1; i >= 0; i--) {
86 for (i = 0; i < c.
len(); i++)
90 for (i = 0; i < a.
len(); i++) {
103 c.
rep()[i] = ai - bi;
116 for (i = 0; i < a.
len(); i++) {
132 a.
rep()[i] = ai - bi;
141 int cmp, carry, i, ai, bi, ci;
174 for (i = 0; i < c.
len(); i++) {
179 for (i = 0; i < c.
len(); i++) {
192 ci = ai + bi + carry;
199 c.
rep()[i] = ci % 10;
208 int f_v = (verbose_level >= 1);
212 cout <<
"longinteger_domain::add_mod "
213 "a=" << a <<
" b=" << b <<
" m=" << m << endl;
221 cout <<
"longinteger_domain::add_mod "
222 "a=" << a <<
" + b=" << b <<
" mod m=" << m <<
" is " << c << endl;
260 B.
create(b, __FILE__, __LINE__);
271 char ai, bj, d, carry;
275 c.
create(0, __FILE__, __LINE__);
288 for (i = 0; i < c.
len(); i++) {
293 cout <<
"longinteger_domain::mult a=";
299 for (j = 0; j < b.
len(); j++) {
302 for (i = 0; i < a.
len(); i++) {
304 d = ai * bj + carry + c.
rep()[i + j];
306 cout <<
"longinteger:mult error: d >= 100" << endl;
310 c.
rep()[i + j] = d % 10;
312 cout <<
"c[" << i + j <<
"]=" << d % 10 <<
"="
313 << (char)(
'0' + c.
rep()[i + j]) << endl;
317 c.
rep()[j + a.
len()] = carry;
319 cout <<
"c[" << j + a.
len() <<
"]=" << carry <<
"="
320 << (char)(
'0' + carry) << endl;
325 cout <<
"longinteger_domain::mult c=";
331 cout <<
"longinteger_domain::mult after normalize, c=";
352 B.
create(b, __FILE__, __LINE__);
362 for (i = 9; i >= 0; i--) {
368 cout <<
"do_division we should never reach this point" << endl;
376 int f_v = (verbose_level >= 1);
377 int f_vv = (verbose_level >= 2);
379 char ai, bj, d, carry;
384 cout <<
"longinteger_domain::mult_mod "
385 "a=" << a <<
" b=" << b <<
" m=" << m << endl;
388 c.
create(0, __FILE__, __LINE__);
392 cout << a <<
" * " << b << endl;
393 cout <<
"longinteger_domain::mult_mod a >= m" << endl;
397 cout << a <<
" * " << b << endl;
398 cout <<
"longinteger_domain::mult_mod b >= m" << endl;
409 for (i = 0; i < 10; i++) {
411 mult(m, cc, table[i]);
416 cout <<
"longinteger_domain::mult_mod "
417 "calling c.freeself" << endl;
421 cout <<
"longinteger_domain::mult_mod"
422 "after c.freeself" << endl;
425 c.
len() = (int) (l + 2);
427 for (i = 0; i < c.
len(); i++) {
432 for (j = b.
len() - 1; j >= 0; j--) {
434 cout <<
"j=" << j << endl;
438 for (i = 0; i < l; i++) {
445 d = ai * bj + carry + c.
rep()[i];
450 cout <<
"longinteger:mult_mod error: d >= 100" << endl;
457 d = c.
rep()[i] + carry;
463 d = c.
rep()[i] + carry;
467 cout <<
"longinteger_domain::mult_mod "
468 "error: carry" << endl;
473 cout <<
"longinteger_domain::mult_mod "
474 "c=" << c <<
" len " << c.
len() << endl;
480 cout <<
"longinteger_domain::mult_mod "
481 "r=" << r <<
" len " << r.
len() << endl;
485 cout <<
"longinteger_domain::mult_mod"
486 "c=c0=" << c <<
" len " << c.
len() << endl;
490 for (i = 0; i < r.
len(); i++) {
491 if (i + 1 < c.
len()) {
492 c.
rep()[i + 1] = r.
rep()[i];
496 for (; i < c.
len(); i++) {
501 for (i = 0; i < r.
len(); i++) {
506 for (; i < c.
len(); i++) {
511 cout <<
"c=" << c <<
" len " << c.
len() << endl;
516 cout <<
"longinteger_domain::mult_mod " << a <<
" * " << b
517 <<
" = " << c <<
" mod " << m << endl;
526 int f_v = (verbose_level >= 1);
529 cout <<
"longinteger_domain::multiply_up" << endl;
533 cout <<
"longinteger_domain::multiply_up "
536 for (i = 0; i < len; i++) {
540 b.
create(x[i], __FILE__, __LINE__);
542 cout <<
"longinteger_domain::multiply_up "
543 "i=" << i <<
" x[i]=" << x[i]
544 <<
" b=" << b << endl;
548 cout <<
"longinteger_domain::multiply_up "
549 "i=" << i <<
" x[i]=" << x[i]
550 <<
" c=" << c << endl;
554 cout <<
"longinteger_domain::multiply_up "
555 "i=" << i <<
" x[i]=" << x[i]
556 <<
" a=" << a << endl;
561 cout <<
"longinteger_domain::multiply_up done" << endl;
570 int f_v = (verbose_level >= 1);
573 cout <<
"longinteger_domain::multiply_up_lint" << endl;
577 cout <<
"longinteger_domain::multiply_up_lint "
580 for (i = 0; i < len; i++) {
584 b.
create(x[i], __FILE__, __LINE__);
586 cout <<
"longinteger_domain::multiply_up_lint "
587 "i=" << i <<
" x[i]=" << x[i]
588 <<
" b=" << b << endl;
592 cout <<
"longinteger_domain::multiply_up_lint "
593 "i=" << i <<
" x[i]=" << x[i]
594 <<
" c=" << c << endl;
598 cout <<
"longinteger_domain::multiply_up_lint "
599 "i=" << i <<
" x[i]=" << x[i]
600 <<
" a=" << a << endl;
605 cout <<
"longinteger_domain::multiply_up_lint done" << endl;
635 cout <<
"longinteger_domain::integral_division_exact "
636 "b does not divide a" << endl;
646 int f_v = (verbose_level >= 1);
651 cout <<
"longinteger_domain::integral_division "
652 "dividing a=" << a <<
" by b=" << b << endl;
655 cout <<
"longinteger_domain::integral_division "
656 "a is negative" << endl;
660 cout <<
"longinteger_domain::integral_division "
661 "b is negative" << endl;
670 for (i = 0; i < 10; i++) {
671 c.
create(i, __FILE__, __LINE__);
672 mult(b, c, table[i]);
682 for (i = 0; i < b.
len(); i++) {
683 r.
rep()[i] = a.
rep()[l + i];
691 for (i = 0; i < q.
len(); i++) {
696 for ( ; l >= 0; l--) {
697 ql = do_division(*
this, r, table);
701 cout <<
"l=" << l <<
" r=" << r
702 <<
" ql=" << ql <<
" c=" << c << endl;
711 for (i = 0; i < c.
len(); i++) {
712 r.
rep()[i + 1] = c.
rep()[i];
714 for (i++ ; i < r.
len(); i++) {
717 r.
rep()[0] = a.
rep()[l - 1];
729 int verbose_level = 0;
731 B.
create(b, __FILE__, __LINE__);
741 int verbose_level = 0;
743 B.
create(b, __FILE__, __LINE__);
754 int f_v = (verbose_level >= 1);
755 int f_vv = (verbose_level >= 2);
756 longinteger_object q, rm1, r, rp1, sm1, s, sp1, tm1, t, tp1, x, y;
760 cout <<
"longinteger_domain::extended_gcd "
761 "a=" << a <<
" b=" << b << endl;
765 u.
create(0, __FILE__, __LINE__);
766 v.
create(1, __FILE__, __LINE__);
776 u.
create(1, __FILE__, __LINE__);
777 v.
create(0, __FILE__, __LINE__);
818 sm1.
create(1, __FILE__, __LINE__);
819 tm1.
create(0, __FILE__, __LINE__);
820 s.
create(0, __FILE__, __LINE__);
821 t.
create(1, __FILE__, __LINE__);
899 for (i = 0; i < len; i++) {
904 for (i = 0; i < len; i++) {
905 cout << rep[i] <<
" ";
953 int f_v = (verbose_level >= 1);
954 int f_vv = (verbose_level >= 2);
962 cout <<
"longinteger_domain::power_longint_mod" << endl;
963 cout <<
"computing " << b <<
" to the power "
964 << n <<
" mod " << m <<
":" << endl;
968 cout <<
"n=" << N <<
" : " << b <<
"^"
969 << N <<
" * " << c << endl;
973 cout <<
"after division by 2, n1=" << n1
974 <<
" r=" << r << endl;
977 mult_mod(b, c, d, m, verbose_level);
979 cout << b <<
" * " << c <<
" = " << d << endl;
983 mult_mod(b, b, d, m, verbose_level);
985 cout << b <<
"^2 = " << d << endl;
1004 int f_v = (verbose_level >= 1);
1008 sqrt_a.
create(0, __FILE__, __LINE__);
1012 cout <<
"longinteger_domain::square_root a is negative" << endl;
1020 len = (la >> 1) + 1;
1025 for (i = 0; i < sqrt_a.
len(); i++) {
1026 sqrt_a.
rep()[i] = 0;
1030 cout <<
"longinteger_domain::square_root a=";
1034 for (i = len - 1; i >= 0; i--) {
1035 for (c1 = 9; c1 >= 0; c1--) {
1037 cout <<
"trying a[" << i <<
"]=" << (int) c1 << endl;
1039 sqrt_a.
rep()[i] = c1;
1041 cout <<
"sqrt_a = " << sqrt_a << endl;
1044 mult(sqrt_a, sqrt_a, a2);
1046 cout <<
"a2 = " << a2 << endl;
1050 cout <<
"success with digit " << i
1051 <<
" : sqrt_a=" << sqrt_a << endl;
1058 cout <<
"sqrt_a[" << i <<
"]=" << sqrt_a.
rep()[i] << endl;
1063 cout <<
"longinteger_domain::square_root c=";
1069 cout <<
"longinteger_domain::square_root after normalize, sqrt_a=";
1080 int f_v = (verbose_level >= 1);
1087 cout <<
"longinteger_domain::square_root_mod" << endl;
1090 if (NT.
Jacobi(a, p, 0 ) == -1) {
1091 cout <<
"longinteger_domain::square_root_mod a is not a square modulo p" << endl;
1092 cout <<
"a=" << a << endl;
1093 cout <<
"p=" << p << endl;
1096 Two.
create(2, __FILE__, __LINE__);
1097 Four.
create(4, __FILE__, __LINE__);
1098 A.
create(a, __FILE__, __LINE__);
1099 P.
create(p, __FILE__, __LINE__);
1100 mOne.
create(p - 1, __FILE__, __LINE__);
1102 cout <<
"longinteger_domain::square_root_mod A=" << A << endl;
1103 cout <<
"longinteger_domain::square_root_mod P=" << P << endl;
1104 cout <<
"longinteger_domain::square_root_mod mOne=" << mOne << endl;
1113 cout <<
"longinteger_domain::square_root_mod p % 8 == 5" << endl;
1118 cout <<
"longinteger_domain::square_root_mod a^((p-1)/4)=" << b << endl;
1124 cout <<
"longinteger_domain::square_root_mod a^((p-1)/4)=1" << endl;
1129 cout <<
"longinteger_domain::square_root_mod done" << endl;
1135 cout <<
"longinteger_domain::square_root_mod a^((p-1)/4)=1" << endl;
1148 cout <<
"longinteger_domain::square_root_mod done" << endl;
1153 cout <<
"longinteger_domain::square_root_mod p % 8 = 5 and power neq +-1" << endl;
1154 cout <<
"power = " << b << endl;
1159 cout <<
"longinteger_domain::square_root_mod p % 8 == 1" << endl;
1163 int n, r = 0, q, e, m;
1167 cout <<
"longinteger_domain::square_root_mod, Tonelli / Shanks:" << endl;
1171 cout <<
"longinteger_domain::square_root_mod q=" << q << endl;
1179 cout <<
"p - 1 = 2^" << e <<
" * " << q << endl;
1183 for (n = 1; n < p - 1; n++) {
1184 r = NT.
Legendre(n, p, verbose_level - 1);
1191 cout <<
"n=" << n <<
" p=" << p <<
" Legendre(n,p)=" << r<< endl;
1193 N.
create(n, __FILE__, __LINE__);
1195 cout <<
"longinteger_domain::square_root_mod N=" << N << endl;
1201 cout <<
"longinteger_domain::square_root_mod Y=N^q=" << Y << endl;
1207 cout <<
"longinteger_domain::square_root_mod X=" << X << endl;
1214 cout <<
"initialization:" << endl;
1219 cout <<
"Y=" << Y << endl;
1220 cout <<
"r=" << r << endl;
1221 cout <<
"X=" << X << endl;
1222 cout <<
"B=" << B << endl;
1228 cout <<
"longinteger_domain::square_root_mod X2=" << X2 << endl;
1232 cout <<
"longinteger_domain::square_root_mod AB=" << AB << endl;
1233 cout <<
"B=" << B << endl;
1237 cout <<
"loop invariant violated: ab != x^2" << endl;
1238 cout <<
"ab=" << d << endl;
1239 cout <<
"x^2=" << X2 << endl;
1246 cout <<
"longinteger_domain::square_root_mod Ypower=" << Ypower << endl;
1250 cout <<
"loop invariant violated: Y^{2^{r-1}} != -1" << endl;
1258 cout <<
"longinteger_domain::square_root_mod Bpower (before)=" << Bpower << endl;
1262 cout <<
"longinteger_domain::square_root_mod Bpower=" << Bpower << endl;
1265 cout <<
"loop invariant violated: B^{2^{r-1}} != 1" << endl;
1277 for (m = 1; ; m++) {
1284 cout <<
"sqrt_mod(), Tonelli / Shanks:" << endl;
1285 cout <<
"error: a is not a quadratic residue mod p" << endl;
1293 cout << round <<
" & " << A <<
" & " << B <<
" & " << X <<
" & "
1294 << X2 <<
" & " << Y <<
" & " << r <<
" & " << AB
1295 <<
" & " << Ypower <<
" & " << Bpower <<
" & ";
1300 cout <<
" & & & & \\\\" << endl;
1313 cout <<
"longinteger_domain::square_root_mod done" << endl;
1319 cout <<
"m=" << m << endl;
1333 cout <<
" & " << Y <<
" & " << X <<
" & " << B <<
" & " << r;
1334 cout <<
"\\\\" << endl;
1339 cout <<
"longinteger_domain::square_root_mod done" << endl;
1347 a.
create(q, __FILE__, __LINE__);
1358 b.
create(q, __FILE__, __LINE__);
1360 c.
create(-1, __FILE__, __LINE__);
1369 a.
create(2, __FILE__, __LINE__);
1370 b.
create(-1, __FILE__, __LINE__);
1382 a.
create(2, __FILE__, __LINE__);
1383 b.
create(1, __FILE__, __LINE__);
1395 int f_v = (verbose_level >= 1);
1401 cout <<
"longinteger_domain::Dedekind_number n=" << n <<
" q=" << q << endl;
1406 long int i, N, h, d, d_prime;
1413 S.
create(0, __FILE__, __LINE__);
1417 cout <<
"\\frac{1}{" << n <<
"} \\Big( ";
1421 for (i = 0; i < N; i++) {
1423 cout <<
"i=" << i << endl;
1428 for (h = 0; h < len; h++) {
1439 cout <<
"d=" << d <<
" d_prime=" << d_prime <<
" A=" << A <<
" S=" << S << endl;
1460 cout <<
"q^{" << d_prime <<
"}";
1469 B.
create(n, __FILE__, __LINE__);
1472 cout <<
"S=" << S << endl;
1484 cout <<
"longinteger_domain::Dedekind_number done" << endl;
1492 if (((a.
rep()[0] % 2)) == 0)
1524 cout <<
"longinteger_domain::multiplicity_of_p a = 0" << endl;
1528 while (!residue.
is_one()) {
1540 int p_min,
int verbose_level)
1542 int f_v = (verbose_level >= 1);
1543 int f_vv = (verbose_level >= 2);
1545 long int p, r, cnt = 0;
1548 cout <<
"longinteger_domain::smallest_primedivisor " << a
1549 <<
" p_min=" << p_min << endl;
1578 cout <<
"longinteger_domain::smallest_primedivisor n=" << n
1579 <<
" trying p=" << p << endl;
1583 if (f_vv && (cnt % 1) == 0) {
1584 cout <<
"longinteger_domain::smallest_primedivisor n=" << n1
1585 <<
" trying p=" << p <<
" q=" << q
1586 <<
" r=" << r << endl;
1592 pp.
create(p, __FILE__, __LINE__);
1599 cout <<
"longinteger_domain::smallest_primedivisor "
1600 "the number is prime" << endl;
1608 int *&exponents,
int verbose_level)
1610 int f_v = (verbose_level >= 1);
1614 long int p, last_prime = 0;
1619 cout <<
"longinteger_domain::factor_into_longintegers factoring " << a << endl;
1622 cout <<
"longinteger_domain::factor_into_longintegers a is zero" << endl;
1636 pp.
create(p, __FILE__, __LINE__);
1645 cout <<
"longinteger_domain::factor_into_longintegers "
1646 "factor does not divide" << endl;
1651 cout <<
"longinteger_domain::factor_into_longintegers "
1652 "remaining factor: " << n << endl;
1660 if (p == last_prime) {
1662 pp.
create(p, __FILE__, __LINE__);
1670 ex[i] = exponents[i];
1677 pp.
create(p, __FILE__, __LINE__);
1690 cout <<
"longinteger_domain::factor_into_longintegers "
1691 "factor does not divide" << endl;
1695 cout <<
"partial factorization: " << a <<
" = ";
1703 cout <<
"longinteger_domain::factor_into_longintegers "
1704 "prime factorization of " << a <<
" = ";
1711 int &
nb_primes,
int *&primes,
int *&exponents,
1714 int f_v = (verbose_level >= 1);
1716 int p, last_prime = 2, i, r;
1720 cout <<
"factoring " << a << endl;
1723 cout <<
"longinteger_domain::factor a is zero" << endl;
1747 cout <<
"remaining factor: " << n << endl;
1756 if (p == last_prime) {
1764 ex[i] = exponents[i];
1777 cout <<
"dividing " << n <<
" by " << p << endl;
1782 cout <<
"partial factorization: " << a <<
" = ";
1789 cout <<
"factor(): " << a <<
" = ";
1798 int f_v = (verbose_level >= 1);
1799 int f_vv = (verbose_level >= 2);
1802 int n, rr, r1, t1, t2;
1805 cout <<
"longinteger_domain::jacobi(" << a <<
" over " << m <<
")" << endl;
1811 minus_one.
create(-1, __FILE__, __LINE__);
1822 cout << r1 <<
" * Jacobi(" << r <<
", "
1823 << m1 <<
")" << endl;
1828 cout << r1 <<
" * Jacobi( 2^" << n <<
" * "
1829 << a1 <<
", " << m1 <<
")" << endl;
1835 if (rr == 3 || rr == 5) {
1840 cout << r1 <<
" * Jacobi(" << a1 <<
", " << m1 <<
")" << endl;
1846 add(a1, minus_one, a2);
1847 add(m1, minus_one, m2);
1855 if (
ODD(t1) &&
ODD(t2)) {
1859 cout << r1 <<
" * Jacobi(" << a1 <<
", " << m1 <<
")" << endl;
1863 cout <<
"jacobi(" << a <<
", " << m <<
") = " << r1 << endl;
1881 for (i = l - 1; i >= 0; i--) {
1883 r_rep[i] = (char) rr;
1895 int f_v = (verbose_level >= 1);
1901 cout <<
"longinteger_domain::random_number_with_n_decimals" << endl;
1904 for (i = 0; i <= n; i++) {
1914 cout <<
"longinteger_domain::random_number_with_n_decimals "
1915 "random number = " << str << endl;
1923 cout <<
"longinteger_domain::random_number_with_n_decimals done" << endl;
1935 for (i = 0; i < Am; i++) {
1936 for (j = 0; j < Bn; j++) {
1937 c.
create(0, __FILE__, __LINE__);
1938 for (k = 0; k < An; k++) {
1939 mult(A[i * An + k], B[k * Bn + j], a);
1954 int verbose_level = 0;
1956 for (i = 0; i < Am; i++) {
1957 for (j = 0; j < An; j++) {
1960 cout <<
"integral division: " << b
1961 <<
" does not divide " << A[i * An + j] << endl;
1962 cout <<
"i=" << i <<
" j=" << j << endl;
1977 for (i = 0; i < Am; i++) {
1979 for (j = 0; j < An; j++) {
1980 ost << A[i * An + j];
1992 ost <<
"];" << endl;
2001 ost <<
"\\begin{array}{*{" << An <<
"}{r}}" << endl;
2002 for (i = 0; i < Am; i++) {
2003 for (j = 0; j < An; j++) {
2004 ost << A[i * An + j];
2009 ost <<
"\\\\" << endl;
2011 ost <<
"\\end{array}" << endl;
2015 char *aa,
char *bb,
char *nn,
2018 int f_v = (verbose_level >= 1);
2029 cout <<
"longinteger_domain::power_mod:" << aa
2030 <<
" ^ " << bb <<
" == " << result
2031 <<
" mod " << nn << endl;
2043 for (i = 0; i < n; i++) {
2052 int n,
int q,
int f_semilinear)
2066 for (i = 0; i < n; i++) {
2069 x[i] = x[i] / (q - 1);
2077 cout <<
"longinteger_domain::group_order_PGL "
2078 "factors of |PGL(n,q)| = ";
2079 int_vec_print(cout, x, l);
2094 int f_v = (verbose_level >= 1);
2097 cout <<
"longinteger_domain::square_root_floor" << endl;
2106 cout <<
"longinteger_domain::square_root_floor "
2107 "no square root, the number is negative" << endl;
2111 x.
create(0, __FILE__, __LINE__);
2119 len = (la >> 1) + 1;
2126 for (l = 0; l < len; l++) {
2127 Y.
ith(l) = (char) 0;
2130 for (l = len - 1; l >= 0; l--) {
2131 for (c1 = 9; c1 >= 0; c1--) {
2143 cout <<
"longinteger_domain::square_root_floor done" << endl;
2152 for (
int h = 0; h < len; h++) {
2153 cout << (char)(
'0' + rep[h]) <<
" ";
various functions related to geometries
void AG_element_unrank(int q, int *v, int stride, int len, long int a)
basic number theoretic functions
int Jacobi(long int a, long int m, int verbose_level)
void print_longfactorization(int nb_primes, ring_theory::longinteger_object *primes, int *exponents)
int Legendre(long int a, long int p, int verbose_level)
void print_factorization(int nb_primes, int *primes, int *exponents)
int i_power_j(int i, int j)
long int i_power_j_lint(long int i, long int j)
void factor_prime_power(int q, int &p, int &e)
int factor_int(int a, int *&primes, int *&exponents)
interface to system functions
int random_integer(int p)
domain to compute with objects of type longinteger
void extended_gcd(longinteger_object &a, longinteger_object &b, longinteger_object &g, longinteger_object &u, longinteger_object &v, int verbose_level)
int jacobi(longinteger_object &a, longinteger_object &m, int verbose_level)
int compare(longinteger_object &a, longinteger_object &b)
void integral_division_exact(longinteger_object &a, longinteger_object &b, longinteger_object &a_over_b)
void base_b_representation(longinteger_object &a, int b, int *&rep, int &len)
int quotient_as_int(longinteger_object &a, longinteger_object &b)
int square_root_mod(int a, int p, int verbose_level)
void power_mod(char *aa, char *bb, char *nn, longinteger_object &result, int verbose_level)
void multiply_up(longinteger_object &a, int *x, int len, int verbose_level)
void add_mod(longinteger_object &a, longinteger_object &b, longinteger_object &c, longinteger_object &m, int verbose_level)
int is_odd(longinteger_object &a)
void print_digits(char *rep, int len)
void add_int_in_place(longinteger_object &a, long int b)
long int quotient_as_lint(longinteger_object &a, longinteger_object &b)
int is_less_than(longinteger_object &a, longinteger_object &b)
void subtract_signless(longinteger_object &a, longinteger_object &b, longinteger_object &c)
int multiplicity_of_p(longinteger_object &a, longinteger_object &residue, int p)
void power_longint_mod(longinteger_object &a, longinteger_object &n, longinteger_object &m, int verbose_level)
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 group_order_PGL(longinteger_object &result, int n, int q, int f_semilinear)
void create_Fermat(longinteger_object &F, int n)
long int smallest_primedivisor(longinteger_object &a, int p_min, int verbose_level)
void random_number_with_n_decimals(longinteger_object &R, int n, int verbose_level)
int logarithm_base_b(longinteger_object &a, int b)
void integral_division_by_lint(longinteger_object &a, long int b, longinteger_object &q, long int &r)
void matrix_entries_integral_division_exact(longinteger_object *A, longinteger_object &b, int Am, int An)
void mult_in_place(longinteger_object &a, longinteger_object &b)
void square_root(longinteger_object &a, longinteger_object &sqrt_a, int verbose_level)
void mult_mod(longinteger_object &a, longinteger_object &b, longinteger_object &c, longinteger_object &m, int verbose_level)
void random_number_less_than_n(longinteger_object &n, longinteger_object &r)
void create_qnm1(longinteger_object &a, int q, int n)
int is_even(longinteger_object &a)
void create_q_to_the_n(longinteger_object &a, int q, int n)
void square_root_floor(longinteger_object &a, longinteger_object &x, int verbose_level)
void matrix_product(longinteger_object *A, longinteger_object *B, longinteger_object *&C, int Am, int An, int Bn)
void integral_division(longinteger_object &a, longinteger_object &b, longinteger_object &q, longinteger_object &r, int verbose_level)
void subtract_in_place(longinteger_object &a, longinteger_object &b)
void factor(longinteger_object &a, int &nb_primes, int *&primes, int *&exponents, int verbose_level)
void create_Mersenne(longinteger_object &M, int n)
void multiply_up_lint(longinteger_object &a, long int *x, int len, int verbose_level)
void power_int(longinteger_object &a, int n)
int remainder_mod_int(longinteger_object &a, int p)
void add_in_place(longinteger_object &a, longinteger_object &b)
void factor_into_longintegers(longinteger_object &a, int &nb_primes, longinteger_object *&primes, int *&exponents, int verbose_level)
void matrix_print_tex(std::ostream &ost, longinteger_object *A, int Am, int An)
void power_int_mod(longinteger_object &a, int n, longinteger_object &m)
void Dedekind_number(longinteger_object &Dnq, int n, int q, int verbose_level)
void mult_integer_in_place(longinteger_object &a, int b)
void subtract_signless_in_place(longinteger_object &a, longinteger_object &b)
void matrix_print_GAP(std::ostream &ost, longinteger_object *A, int Am, int An)
int compare_unsigned(longinteger_object &a, longinteger_object &b)
void factorial(longinteger_object &result, int n)
a class to represent arbitrary precision integers
int is_one_or_minus_one()
void create_from_base_10_string(const char *str, int verbose_level)
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 NEW_OBJECTS(type, n)
the orbiter library for the classification of combinatorial objects