18namespace layer1_foundations {
19namespace ring_theory {
34 std::string &fname_code,
35 std::string &A_coeffs, std::string &B_coeffs,
38 int f_v = (verbose_level >= 1);
41 cout <<
"ring_theory_global::write_code_for_division" << endl;
46 std::ofstream ost(fname_code);
55 ost <<
" * " << fname_code << endl;
57 ost <<
" * Created on: " << str << endl;
58 ost <<
" * Author: Orbiter" << endl;
62 ost <<
"#include <iostream>" << endl;
64 ost <<
"using namespace std;" << endl;
67 ost <<
"void divide(const unsigned char *A, unsigned char *R);" << endl;
69 ost <<
"int main(int argc, char **argv)" << endl;
97 for (i = 0; i <= da; i++) {
98 FX.
s_i(poly_A, i) = data_A[i];
103 for (i = 0; i <= db; i++) {
104 FX.
s_i(poly_B, i) = data_B[i];
136 int *ra = (
int *) poly_A;
137 int *rb = (
int *) poly_B;
144 cout <<
"ring_theory_global::write_code_for_division" << endl;
146 if (da != FX.
degree(poly_A)) {
147 cout <<
"ring_theory_global::write_code_for_division da != FX.degree(poly_A)" << endl;
150 if (db != FX.
degree(poly_B)) {
151 cout <<
"ring_theory_global::write_code_for_division db != FX.degree(poly_B)" << endl;
162 ost <<
"\tconst unsigned char A[] = {" << endl;
166 for (i = 0; i <= da; i++) {
169 if (((i + 1) % 25) == 0) {
176 ost <<
"\t};" << endl;
180 ost <<
"\tunsigned char R[" << db + 1 <<
"] = {" << endl;
182 for (i = 0; i <= db; i++) {
193 ost <<
"\tdivide(A, R);" << endl;
198 ost <<
"\tint i;" << endl;
199 ost <<
"\tfor (i = 0; i <= " << db <<
"; i++) {" << endl;
200 ost <<
"\t\tcout << (int) R[i] << \",\";" << endl;
201 ost <<
"\t}" << endl;
202 ost <<
"\tcout << endl;" << endl;
211 ost <<
"\t// the size of the array B is " << F->
q - 1 <<
" x " << db + 1 << endl;
212 ost <<
"const unsigned char B[] = {" << endl;
215 for (i = 1; i < F->
q; i++) {
217 for (j = 0; j <= db; j++) {
220 ost << setw(w) << b <<
",";
229 ost <<
"void divide(const unsigned char *in, unsigned char *out)" << endl;
233 ost <<
"\tunsigned char R[" << da + 1 <<
"];" << endl;
234 ost <<
"\tint i, j, ii, jj;" << endl;
235 ost <<
"\tint x;" << endl;
239 ost <<
"\tfor (i = 0; i < " << da + 1 <<
"; i++) {" << endl;
240 ost <<
"\t\tR[i] = in[i];" << endl;
241 ost <<
"\t}" << endl;
250 ost <<
"\tfor (i = " << da <<
", j = " << dq <<
"; i >= " << db <<
"; i--, j--) {" << endl;
251 ost <<
"\t\tx = R[i];" << endl;
252 ost <<
"\t\tif (x == 0) {" << endl;
253 ost <<
"\t\t\tcontinue;" << endl;
254 ost <<
"\t\t}" << endl;
255 ost <<
"\t\t//cout << \"i=\" << i << \" x=\" << x << endl;" << endl;
256 ost <<
"\t\tx--;" << endl;
257 ost <<
"\t\tfor (ii = i, jj = " << db <<
"; jj >= 0; ii--, jj--) {" << endl;
258 ost <<
"\t\t\tR[ii] ^= B[x * " << db + 1 <<
" + jj];" << endl;
259 ost <<
"\t\t}" << endl;
260 ost <<
"\t}" << endl;
263 for (i = da, j = dq; i >= db; i--, j--) {
265 c = F->
mult(x, pivot_inv);
269 for (ii = i, jj = db; jj >= 0; ii--, jj--) {
272 R[ii] = F->
add(d, R[ii]);
275 cout <<
"unipoly::write_code_for_division: R[i] != 0" << endl;
290 ost <<
"\tfor (i = " << db <<
"; i >= 0; i--) {" << endl;
291 ost <<
"\t\tout[i] = R[i];" << endl;
292 ost <<
"\t}" << endl;
300 cout <<
"Written file " << fname_code <<
" of size " << Fio.
file_size(fname_code) << endl;
303 cout <<
"ring_theory_global::write_code_for_division done" << endl;
310 std::string &A_coeffs, std::string &B_coeffs,
313 int f_v = (verbose_level >= 1);
316 cout <<
"ring_theory_global::polynomial_division" << endl;
340 for (i = 0; i <= da; i++) {
341 FX.
s_i(A, i) = data_A[i];
346 for (i = 0; i <= db; i++) {
347 FX.
s_i(B, i) = data_B[i];
369 cout <<
"ring_theory_global::polynomial_division "
370 "before FX.division_with_remainder" << endl;
379 cout <<
"ring_theory_global::polynomial_division "
380 "after FX.division_with_remainder" << endl;
401 cout <<
"ring_theory_global::polynomial_division done" << endl;
407 std::string &A_coeffs, std::string &B_coeffs,
int verbose_level)
409 int f_v = (verbose_level >= 1);
412 cout <<
"ring_theory_global::extended_gcd_for_polynomials" << endl;
441 for (i = 0; i <= da; i++) {
442 if (data_A[i] < 0 || data_A[i] >= F->
q) {
443 data_A[i] = NT.
mod(data_A[i], F->
q);
445 FX.
s_i(A, i) = data_A[i];
450 for (i = 0; i <= db; i++) {
451 if (data_B[i] < 0 || data_B[i] >= F->
q) {
452 data_B[i] = NT.
mod(data_B[i], F->
q);
454 FX.
s_i(B, i) = data_B[i];
476 cout <<
"ring_theory_global::extended_gcd_for_polynomials "
477 "before FX.extended_gcd" << endl;
483 U, V, G, verbose_level);
487 cout <<
"ring_theory_global::extended_gcd_for_polynomials "
488 "after FX.extended_gcd" << endl;
504 cout <<
"deg G(X) = " << FX.
degree(G) << endl;
513 cout <<
"normalization:" << endl;
517 cout <<
"cv=" << cv << endl;
521 for (i = 0; i <= d; i++) {
526 for (i = 0; i <= d; i++) {
531 for (i = 0; i <= d; i++) {
538 cout <<
"after normalization:" << endl;
557 cout <<
"ring_theory_global::extended_gcd_for_polynomials done" << endl;
564 std::string &A_coeffs, std::string &B_coeffs, std::string &M_coeffs,
567 int f_v = (verbose_level >= 1);
570 cout <<
"ring_theory_global::polynomial_mult_mod" << endl;
576 int sz_A, sz_B, sz_M;
599 for (i = 0; i <= da; i++) {
600 if (data_A[i] < 0 || data_A[i] >= F->
q) {
601 data_A[i] = NT.
mod(data_A[i], F->
q);
603 FX.
s_i(A, i) = data_A[i];
608 for (i = 0; i <= db; i++) {
609 if (data_B[i] < 0 || data_B[i] >= F->
q) {
610 data_B[i] = NT.
mod(data_B[i], F->
q);
612 FX.
s_i(B, i) = data_B[i];
617 for (i = 0; i <= dm; i++) {
618 if (data_M[i] < 0 || data_M[i] >= F->
q) {
619 data_M[i] = NT.
mod(data_M[i], F->
q);
621 FX.
s_i(M, i) = data_M[i];
644 cout <<
"ring_theory_global::polynomial_mult_mod before FX.mult_mod" << endl;
648 FX.
mult_mod(A, B, C, M, verbose_level);
652 cout <<
"ring_theory_global::polynomial_mult_mod after FX.mult_mod" << endl;
660 cout <<
"deg C(X) = " << FX.
degree(C) << endl;
664 cout <<
"ring_theory_global::polynomial_mult_mod done" << endl;
670 std::string &A_coeffs,
673 int f_v = (verbose_level >= 1);
676 cout <<
"ring_theory_global::polynomial_find_roots" << endl;
698 for (i = 0; i <= da; i++) {
699 if (data_A[i] < 0 || data_A[i] >= F->
q) {
700 data_A[i] = NT.
mod(data_A[i], F->
q);
702 FX.
s_i(A, i) = data_A[i];
715 cout <<
"ring_theory_global::polynomial_find_roots before FX.mult_mod" << endl;
721 for (a = 0; a < F->
q; a++) {
725 cout <<
"a root is " << a << endl;
731 cout <<
"ring_theory_global::polynomial_find_roots after FX.mult_mod" << endl;
736 cout <<
"ring_theory_global::polynomial_find_roots done" << endl;
742 long int rk0,
long int rk1,
int verbose_level)
744 int f_v = (verbose_level >= 1);
748 int f_is_irred, f_is_primitive;
755 cout <<
"ring_theory_global::sift_polynomials" << endl;
761 for (rk = rk0; rk < rk1; rk++) {
766 __FILE__, __LINE__, 0 );
768 cout <<
"rk=" << rk <<
" poly=";
780 Q.
create(F->
q, __FILE__, __LINE__);
781 m1.
create(-1, __FILE__, __LINE__);
785 cout <<
"ring_theory_global::sift_polynomials Qm1 = " << Qm1 << endl;
788 primes, exponents, verbose_level - 2);
790 cout <<
"ring_theory_global::sift_polynomials after factoring "
791 << Qm1 <<
" nb_primes=" <<
nb_primes << endl;
792 cout <<
"primes:" << endl;
794 cout << i <<
" : " << primes[i] << endl;
805 cout <<
"rk=" << rk <<
" poly=";
807 cout <<
" is_irred=" << f_is_irred <<
" is_primitive=" << f_is_primitive << endl;
810 Table[idx * 3 + 0] = rk;
811 Table[idx * 3 + 1] = f_is_irred;
812 Table[idx * 3 + 2] = f_is_primitive;
820 for (idx = 0; idx < len; idx++) {
821 rk = Table[idx * 3 + 0];
823 __FILE__, __LINE__, 0 );
824 f_is_irred = Table[idx * 3 + 1];
825 f_is_primitive = Table[idx * 3 + 2];
828 cout <<
" is_irred=" << f_is_irred <<
" is_primitive=" << f_is_primitive;
837 cout <<
"ring_theory_global::sift_polynomials done" << endl;
844 long int rk0,
long int rk1,
int verbose_level)
846 int f_v = (verbose_level >= 1);
849 cout <<
"ring_theory_global::mult_polynomials" << endl;
859 snprintf(str, 1000,
"polynomial_mult_%ld_%ld.tex", rk0, rk1);
861 snprintf(title, 1000,
"Polynomial Mult");
883 cout <<
"ring_theory_global::mult_polynomials before report" << endl;
889 ost <<
"$" << rk0 <<
" \\otimes " << rk1 <<
" = " << rk2 <<
"$\\\\" << endl;
893 cout <<
"ring_theory_global::mult_polynomials after report" << endl;
902 cout <<
"ring_theory_global::mult_polynomials written file " << fname <<
" of size "
907 cout <<
"ring_theory_global::mult_polynomials done" << endl;
915 long int rk0,
long int rk1,
int verbose_level)
917 int f_v = (verbose_level >= 1);
920 cout <<
"ring_theory_global::polynomial_division_with_report" << endl;
930 snprintf(str, 1000,
"polynomial_division_%ld_%ld.tex", rk0, rk1);
932 snprintf(title, 1000,
"Polynomial Division");
954 cout <<
"ring_theory_global::polynomial_division_with_report before division_with_remainder_numerically_with_report" << endl;
960 ost <<
"$" << rk0 <<
" / " << rk1 <<
" = " << rk2 <<
"$ Remainder $" << rk3 <<
"$\\\\" << endl;
964 cout <<
"ring_theory_global::polynomial_division_with_report after division_with_remainder_numerically_with_report" << endl;
973 cout <<
"ring_theory_global::polynomial_division_with_report written file " << fname <<
" of size "
978 cout <<
"ring_theory_global::polynomial_division_with_report done" << endl;
985 std::string &input_file,
long int rk1,
int verbose_level)
987 int f_v = (verbose_level >= 1);
990 cout <<
"ring_theory_global::polynomial_division_from_file_with_report" << endl;
999 snprintf(str, 1000,
"polynomial_division_file_%ld.tex", rk1);
1001 snprintf(title, 1000,
"Polynomial Division");
1007 ofstream ost(fname);
1023 cout <<
"ring_theory_global::polynomial_division_from_file_with_report "
1024 "before division_with_remainder_numerically_with_report" << endl;
1028 long int rk_q, rk_r;
1031 rk_q, rk_r, ost, verbose_level);
1033 ost <<
"$ / " << rk1 <<
" = " << rk_q <<
"$ Remainder $"
1034 << rk_r <<
"$\\\\" << endl;
1038 cout <<
"ring_theory_global::polynomial_division_from_file_with_report "
1039 "after division_with_remainder_numerically_with_report" << endl;
1048 cout <<
"ring_theory_global::polynomial_division_from_file_with_report written file " << fname <<
" of size "
1054 cout <<
"ring_theory_global::polynomial_division_from_file_with_report done" << endl;
1061 std::string &input_file,
long int rk1,
int k,
int verbose_level)
1063 int f_v = (verbose_level >= 1);
1066 cout <<
"ring_theory_global::polynomial_division_from_file_all_k_error_patterns_with_report" << endl;
1075 snprintf(str, 1000,
"polynomial_division_file_all_%d_error_patterns_%ld.tex", k, rk1);
1077 snprintf(title, 1000,
"Polynomial Division");
1083 ofstream ost(fname);
1099 cout <<
"ring_theory_global::polynomial_division_from_file_all_k_error_patterns_with_report before division_with_remainder_numerically_with_report" << endl;
1103 long int *rk_q, *rk_r;
1115 rk_q, rk_r, n, N, ost, verbose_level);
1117 ost <<
"$" << input_file <<
" / " << rk1 <<
"$\\\\" << endl;
1119 for (h = 0; h < N; h++) {
1124 ost << rk_r[h] <<
"\\\\" << endl;
1131 cout <<
"ring_theory_global::polynomial_division_from_file_all_k_error_patterns_with_report after division_with_remainder_numerically_with_report" << endl;
1141 cout <<
"ring_theory_global::polynomial_division_from_file_all_k_error_patterns_with_report written file " << fname <<
" of size "
1147 cout <<
"ring_theory_global::polynomial_division_from_file_with_report done" << endl;
1154 std::string &variety_label_txt,
1155 std::string &variety_label_tex,
1156 int variety_nb_vars,
int variety_degree,
1157 std::vector<std::string> &Variety_coeffs,
1159 std::string &number_of_conditions_satisfied_fname,
1160 std::string &label_txt,
1161 std::string &label_tex,
1162 int &nb_pts,
long int *&Pts,
1166 int f_v = (verbose_level >= 1);
1170 cout <<
"ring_theory_global::number_of_conditions_satisfied" << endl;
1175 cout <<
"Reading file " << number_of_conditions_satisfied_fname <<
" of size "
1176 << Fio.
file_size(number_of_conditions_satisfied_fname) << endl;
1178 Fio.
read_set_from_file(number_of_conditions_satisfied_fname, Pts, nb_pts, verbose_level);
1196 HPD->
init(F, variety_nb_vars, variety_degree,
1198 Monomial_ordering_type,
1204 label_txt.assign(variety_label_txt);
1205 label_tex.assign(variety_label_tex);
1210 for (h = 0; h < Variety_coeffs.size(); h++) {
1213 cout <<
"ring_theory_global::number_of_conditions_satisfied "
1214 "h=" << h <<
" / " << Variety_coeffs.size() <<
" : ";
1215 cout << Variety_coeffs[h] << endl;
1223 cout <<
"ring_theory_global::number_of_conditions_satisfied "
1224 "h=" << h <<
" / " << Variety_coeffs.size() <<
" coeff:";
1229 for (i = 0; i < nb_pts; i++) {
1248 cout <<
"Number of conditions satisfied:" << endl;
1254 int f, l, t, j, pos;
1257 for (i = T.
nb_types - 1; i >= 0; i--) {
1267 fname2.assign(number_of_conditions_satisfied_fname);
1268 sprintf(str,
"%d", t);
1270 fname2.append(
".csv");
1274 long int *the_class;
1277 for (j = 0; j < l; j++) {
1279 the_class[j] = Pts[pos];
1284 cout <<
"class of type " << t <<
" contains " << l <<
" elements:" << endl;
1286 cout, the_class, l, variety_nb_vars);
1300 cout <<
"ring_theory_global::number_of_conditions_satisfied done" << endl;
1307 std::string &variety_label_txt,
1308 std::string &variety_label_tex,
1309 int variety_nb_vars,
int variety_degree,
1310 std::vector<std::string> &Variety_coeffs,
1312 std::string &label_txt,
1313 std::string &label_tex,
1314 int &nb_pts,
long int *&Pts,
1318 int f_v = (verbose_level >= 1);
1321 cout <<
"ring_theory_global::create_intersection_of_zariski_open_sets" << endl;
1334 HPD->
init(F, variety_nb_vars, variety_degree,
1336 Monomial_ordering_type,
1342 label_txt.assign(variety_label_txt);
1343 label_tex.assign(variety_label_tex);
1345 for (h = 0; h < Variety_coeffs.size(); h++) {
1348 cout <<
"ring_theory_global::create_intersection_of_zariski_open_sets "
1349 "h=" << h <<
" / " << Variety_coeffs.size() <<
" : ";
1350 cout << Variety_coeffs[h] << endl;
1357 cout <<
"ring_theory_global::create_intersection_of_zariski_open_sets "
1358 "h=" << h <<
" / " << Variety_coeffs.size() <<
" coeff:";
1366 cout <<
"ring_theory_global::create_intersection_of_zariski_open_sets "
1367 "before HPD->enumerate_points_zariski_open_set" << endl;
1370 vector<long int> Points;
1379 nb_pts = Points.size();
1382 for (i = 0; i < nb_pts; i++) {
1383 Pts1[i] = Points[i];
1390 nb_pts = Points.size();
1392 for (i = 0; i < nb_pts; i++) {
1402 cout <<
"ring_theory_global::create_intersection_of_zariski_open_sets "
1403 "after HPD->enumerate_points_zariski_open_set, "
1404 "nb_pts = " << nb_pts << endl;
1413 cout, Pts, nb_pts, variety_nb_vars);
1422 cout <<
"ring_theory_global::create_intersection_of_zariski_open_sets done" << endl;
1429 std::string &variety_label,
1430 std::string &variety_label_tex,
1431 int variety_nb_vars,
int variety_degree,
1432 std::string &variety_coeffs,
1434 std::string &label_txt,
1435 std::string &label_tex,
1436 int &nb_pts,
long int *&Pts,
1440 int f_v = (verbose_level >= 1);
1443 cout <<
"ring_theory_global::create_projective_variety" << endl;
1451 HPD->
init(F, variety_nb_vars, variety_degree,
1453 Monomial_ordering_type,
1458 label_txt.assign(variety_label);
1459 label_tex.append(variety_label_tex);
1468 cout <<
"ring_theory_global::create_projective_variety "
1470 <<
" but is " << sz << endl;
1474 cout <<
"ring_theory_global::create_projective_variety coeff:";
1482 cout <<
"ring_theory_global::create_projective_variety "
1483 "before HPD->enumerate_points" << endl;
1486 vector<long int> Points;
1490 nb_pts = Points.size();
1492 for (i = 0; i < nb_pts; i++) {
1496 cout <<
"ring_theory_global::create_projective_variety "
1497 "after HPD->enumerate_points, nb_pts = " << nb_pts << endl;
1501 cout, Pts, nb_pts, variety_nb_vars);
1507 cout <<
"ring_theory_global::create_projective_variety done" << endl;
1513 std::string &variety_label_txt,
1514 std::string &variety_label_tex,
1515 int curve_nb_vars,
int curve_degree,
1516 std::string &curve_coeffs,
1518 std::string &label_txt,
1519 std::string &label_tex,
1520 int &nb_pts,
long int *&Pts,
1524 int f_v = (verbose_level >= 1);
1527 cout <<
"ring_theory_global::create_projective_curve" << endl;
1535 HPD->
init(F, 2, curve_degree,
1537 Monomial_ordering_type,
1545 label_txt.assign(variety_label_txt);
1546 label_tex.assign(variety_label_tex);
1548 int len, i, j, a, b, c, s, t;
1553 if (len != curve_degree + 1) {
1554 cout <<
"ring_theory_global::create_projective_curve "
1555 "len != curve_degree + 1" << endl;
1564 for (i = 0; i < nb_pts; i++) {
1568 for (j = 0; j < curve_nb_vars; j++) {
1576 cout << setw(4) << i <<
" : ";
1578 cout <<
" : " << setw(5) << c << endl;
1583 cout, Pts, nb_pts, curve_nb_vars);
1591 cout <<
"ring_theory_global::create_projective_curve done" << endl;
1600 long int *cyclotomic_set,
int cylotomic_set_size,
1604 int f_v = (verbose_level >= 1);
1607 cout <<
"ring_theory_global::create_irreducible_polynomial n=" << n << endl;
1610 cout <<
"ring_theory_global::create_irreducible_polynomial before allocating generator etc" << endl;
1613 int degree = cylotomic_set_size;
1626 cout <<
"ring_theory_global::create_irreducible_polynomial creating linear_factor = X-a" << endl;
1628 for (i = 0; i < 2; i++) {
1636 for (i = 0; i <= degree; i++) {
1638 cout <<
"ring_theory_global::create_irreducible_polynomial creating generator[" << i <<
"]" << endl;
1644 cout <<
"ring_theory_global::create_irreducible_polynomial creating generator[0]" << endl;
1652 cout <<
"ring_theory_global::create_irreducible_polynomial coeffs:" << endl;
1655 cout <<
"ring_theory_global::create_irreducible_polynomial generator:" << endl;
1661 cout <<
"ring_theory_global::create_irreducible_polynomial creating Pc" << endl;
1665 cout <<
"ring_theory_global::create_irreducible_polynomial creating Pd" << endl;
1670 for (h = 0; h < cylotomic_set_size; h++) {
1671 i = cyclotomic_set[h];
1673 cout <<
"h=" << h <<
", i=" << i << endl;
1676 cout <<
"ring_theory_global::create_irreducible_polynomial working on root " << i << endl;
1679 cout <<
"ring_theory_global::create_irreducible_polynomial before Fq.assign beta" << endl;
1681 Fq->
assign(Beta[i], linear_factor[0], verbose_level);
1683 cout <<
"ring_theory_global::create_irreducible_polynomial before Fq.negate" << endl;
1685 Fq->
negate(linear_factor[0]);
1687 cout <<
"ring_theory_global::create_irreducible_polynomial root: " << i <<
" : ";
1696 cout <<
"ring_theory_global::create_irreducible_polynomial before Fq.assign(generator[j], tmp[j])" << endl;
1698 for (j = 0; j <= r; j++) {
1699 Fq->
assign(generator[j], tmp[j], verbose_level);
1707 cout <<
"ring_theory_global::create_irreducible_polynomial before Fq.assign(tmp[j], generator[j + 1])" << endl;
1709 for (j = 0; j <= r; j++) {
1710 Fq->
assign(tmp[j], generator[j + 1], verbose_level);
1719 for (j = 0; j <= r; j++) {
1721 cout <<
"ring_theory_global::create_irreducible_polynomial j=" << j << endl;
1724 cout <<
"ring_theory_global::create_irreducible_polynomial before Fq.mult(tmp[j], linear_factor[0], Pc)" << endl;
1726 Fq->
mult(tmp[j], linear_factor[0], Pc, verbose_level - 1);
1728 cout <<
"ring_theory_global::create_irreducible_polynomial before Fq.add()" << endl;
1730 Fq->
add(Pc, generator[j], Pd);
1732 cout <<
"ring_theory_global::create_irreducible_polynomial before Fq.assign()" << endl;
1734 Fq->
assign(Pd, generator[j], verbose_level);
1738 cout <<
"ring_theory_global::create_irreducible_polynomial r=" << r << endl;
1741 cout <<
"ring_theory_global::create_irreducible_polynomial current polynomial: ";
1749 cout <<
"ring_theory_global::create_irreducible_polynomial r != degree" << endl;
1754 cout <<
"ring_theory_global::create_irreducible_polynomial The generator polynomial is: ";
1760 cout <<
"ring_theory_global::create_irreducible_polynomial done" << endl;
1770 int f_v = (verbose_level >= 1);
1775 cout <<
"ring_theory_global::compute_nth_roots_as_polynomials " << endl;
1779 Fp.finite_field_init(p,
FALSE , verbose_level - 1);
1781 algebra_global Algebra;
1784 Algebra.get_primitive_polynomial(p, field_degree, 0),
1796 cout <<
"ring_theory_global::make_cyclic_code order of q mod n is m=" << m << endl;
1804 cout <<
"ring_theory_global::make_cyclic_code Index = " << Index << endl;
1809 subgroup_index = Index.
as_int();
1811 cout <<
"ring_theory_global::make_cyclic_code subgroup_index = " << subgroup_index << endl;
1816 cout <<
"ring_theory_global::make_cyclic_code n does not divide q^m-1" << endl;
1822 cout <<
"ring_theory_global::compute_nth_roots_as_polynomials choosing the following irreducible "
1823 "and primitive polynomial:" << endl;
1829 cout <<
"ring_theory_global::compute_nth_roots_as_polynomials creating unipoly_domain Fq modulo M" << endl;
1833 cout <<
"ring_theory_global::compute_nth_roots_as_polynomials extension field created" << endl;
1839 for (i = 0; i < n2; i++) {
1847 if (subgroup_index != 1) {
1850 cout <<
"\\alpha = ";
1855 cout <<
"ring_theory_global::compute_nth_roots_as_polynomials before Fq->power_int" << endl;
1857 Fq->
power_int(beta, subgroup_index, verbose_level - 1);
1859 cout <<
"\\beta = \\alpha^" << Index <<
" = ";
1866 cout <<
"ring_theory_global::compute_nth_roots_as_polynomials subgroup_index is one" << endl;
1871 for (i = 0; i < n2; i++) {
1873 cout <<
"ring_theory_global::compute_nth_roots_as_polynomials i=" << i << endl;
1876 cout <<
"ring_theory_global::compute_nth_roots_as_polynomials working on root " << i << endl;
1879 cout <<
"ring_theory_global::compute_nth_roots_as_polynomials before Fq.assign beta" << endl;
1881 Fq->
assign(beta, Beta[i], verbose_level);
1883 cout <<
"ring_theory_global::compute_nth_roots_as_polynomials before Fq.power_int" << endl;
1885 Fq->
power_int(Beta[i], i, verbose_level);
1890 cout <<
"ring_theory_global::compute_nth_roots_as_polynomials done" << endl;
1898 int n,
int start_idx,
1901 int f_v = (verbose_level >= 1);
1904 cout <<
"ring_theory_global::compute_powers" << endl;
1911 for (i = 0; i < n; i++) {
1918 if (start_idx != 1) {
1921 cout <<
"\\alpha = ";
1926 cout <<
"ring_theory_global::compute_powers before Fq->power_int" << endl;
1928 Fq->
power_int(beta, start_idx, verbose_level - 1);
1930 cout <<
"\\beta = \\alpha^" << start_idx <<
" = ";
1937 cout <<
"ring_theory_global::compute_powers subgroup_index is one" << endl;
1942 for (i = 0; i < n; i++) {
1944 cout <<
"ring_theory_global::compute_powers i=" << i << endl;
1947 cout <<
"ring_theory_global::compute_powers working on root " << i << endl;
1950 cout <<
"ring_theory_global::compute_powers before Fq.assign beta" << endl;
1952 Fq->
assign(beta, Beta[i], verbose_level);
1954 cout <<
"ring_theory_global::compute_powers before Fq.power_int" << endl;
1956 Fq->
power_int(Beta[i], i, verbose_level);
1960 cout <<
"ring_theory_global::compute_powers done" << endl;
1968 int d, std::vector<std::vector<int> > &Table,
1971 int f_v = (verbose_level >= 1);
1972 int f_vv = (verbose_level >= 2);
1978 cout <<
"ring_theory_global::make_all_irreducible_polynomials_of_degree_d "
1979 "d=" << d <<
" q=" << F->
q << endl;
1980 cout <<
"verbose_level=" << verbose_level << endl;
1987 cout <<
"ring_theory_global::make_all_irreducible_polynomials_of_degree_d "
1988 "cnt = " << cnt << endl;
1993 Table =
NEW_int(nb * (d + 1));
1999 cout <<
"ring_theory_global::make_all_irreducible_polynomials_of_degree_d "
2000 " q=" << F->
q <<
" p=" << F->
p <<
" e=" << F->
e << endl;
2011 cout <<
"ring_theory_global::make_all_irreducible_polynomials_of_degree_d "
2012 "chosen irreducible polynomial is " << poly << endl;
2024 cout <<
"ring_theory_global::make_all_irreducible_polynomials_of_degree_d "
2025 "chosen irreducible polynomial m = ";
2039 Normal_basis =
NEW_int(d * d);
2044 cout <<
"ring_theory_global::make_all_irreducible_polynomials_of_degree_d "
2045 "before FX.Frobenius_matrix" << endl;
2049 cout <<
"ring_theory_global::make_all_irreducible_polynomials_of_degree_d "
2050 "Frobenius_matrix = " << endl;
2056 cout <<
"ring_theory_global::make_all_irreducible_polynomials_of_degree_d "
2057 "before compute_normal_basis" << endl;
2062 cout <<
"ring_theory_global::make_all_irreducible_polynomials_of_degree_d "
2063 "Normal_basis = " << endl;
2073 cout <<
"ring_theory_global::make_all_irreducible_polynomials_of_degree_d "
2074 "regular word " << cnt <<
" : v = ";
2081 cout <<
"ring_theory_global::make_all_irreducible_polynomials_of_degree_d "
2082 "regular word " << cnt <<
" : w = ";
2089 for (i = 0; i < d; i++) {
2090 ((
int *) g)[1 + i] = w[i];
2096 cout <<
"ring_theory_global::make_all_irreducible_polynomials_of_degree_d "
2097 "regular word " << cnt <<
" : v = ";
2099 cout <<
" irreducible polynomial = ";
2108 for (i = 0; i <= d; i++) {
2109 T.push_back(((
int *)minpol)[1 + i]);
2124 cout <<
"ring_theory_global::make_all_irreducible_polynomials_of_degree_d "
2126 <<
" irreducible polynomials "
2127 "of degree " << d <<
" over " <<
"F_" << F->
q << endl;
2140 cout <<
"ring_theory_global::make_all_irreducible_polynomials_of_degree_d "
2141 "d=" << d <<
" q=" << F->
q <<
" done" << endl;
2148 int f_v = (verbose_level >= 1);
2149 int f_vv = (verbose_level >= 2);
2156 cout <<
"ring_theory_global::count_all_irreducible_polynomials_of_degree_d "
2157 "d=" << d <<
" q=" << F->
q << endl;
2162 cout <<
"ring_theory_global::count_all_irreducible_polynomials_of_degree_d " << endl;
2166 cout <<
"ring_theory_global::count_all_irreducible_polynomials_of_degree_d "
2167 "p=" << F->
p <<
" e=" << F->
e << endl;
2170 cout <<
"ring_theory_global::count_all_irreducible_polynomials_of_degree_d "
2171 "e=" << F->
e <<
" is greater than one" << endl;
2189 cout <<
"ring_theory_global::count_all_irreducible_polynomials_of_degree_d "
2190 "chosen irreducible polynomial m = ";
2206 Normal_basis =
NEW_int(d * d);
2212 cout <<
"ring_theory_global::count_all_irreducible_polynomials_of_degree_d "
2213 "Frobenius_matrix = " << endl;
2219 F->mult_matrix_matrix(Frobenius, Frobenius, F2, d, d, d,
2222 cout <<
"ring_theory_global::count_all_irreducible_polynomials_of_degree_d "
2223 "Frobenius^2 = " << endl;
2224 int_matrix_print(F2, d, d);
2232 cout <<
"ring_theory_global::count_all_irreducible_polynomials_of_degree_d "
2233 "Normal_basis = " << endl;
2242 cout <<
"ring_theory_global::count_all_irreducible_polynomials_of_degree_d "
2243 "regular word " << cnt <<
" : v = ";
2250 cout <<
"ring_theory_global::count_all_irreducible_polynomials_of_degree_d "
2251 "regular word " << cnt <<
" : w = ";
2258 for (i = 0; i < d; i++) {
2259 ((
int *) g)[1 + i] = w[i];
2263 Frobenius, verbose_level - 3);
2265 cout <<
"ring_theory_global::count_all_irreducible_polynomials_of_degree_d "
2266 "regular word " << cnt <<
" : v = ";
2268 cout <<
" irreducible polynomial = ";
2272 if (FX.
degree(minpol) != d) {
2273 cout <<
"ring_theory_global::count_all_irreducible_polynomials_of_degree_d "
2274 "The polynomial does not have degree d"
2281 cout <<
"ring_theory_global::count_all_irreducible_polynomials_of_degree_d "
2282 "The polynomial is not irreducible" << endl;
2298 cout <<
"ring_theory_global::count_all_irreducible_polynomials_of_degree_d "
2299 "there are " << cnt <<
" irreducible polynomials "
2300 "of degree " << d <<
" over " <<
"F_" << F->
q << endl;
2313 cout <<
"ring_theory_global::count_all_irreducible_polynomials_of_degree_d done" << endl;
2320 int deg,
int verbose_level)
2322 int f_v = (verbose_level >= 1);
2325 cout <<
"ring_theory_global::do_make_table_of_irreducible_polynomials" << endl;
2326 cout <<
"deg=" << deg << endl;
2327 cout <<
"q=" << F->
q << endl;
2331 std::vector<std::vector<int>> Table;
2334 Table, verbose_level);
2338 cout <<
"The " << nb <<
" irreducible polynomials of "
2339 "degree " << deg <<
" over F_" << F->
q <<
" are:" << endl;
2347 T =
NEW_int(Table.size() * (deg + 1));
2348 for (i = 0; i < Table.size(); i++) {
2349 for (j = 0; j < deg + 1; j++) {
2350 T[i * (deg + 1) + j] = Table[i][j];
2362 snprintf(str, 1000,
"Irred_q%d_d%d.tex", F->
q, deg);
2364 snprintf(title, 1000,
"Irreducible Polynomials of Degree %d over F%d", deg, F->
q);
2370 ofstream ost(fname);
2388 cout <<
"ring_theory_global::do_make_table_of_irreducible_polynomials before report" << endl;
2392 ost <<
"There are " << Table.size() <<
" irreducible polynomials of "
2393 "degree " << deg <<
" over the field F" << F->
q <<
":\\\\" << endl;
2394 ost <<
"The coefficients in increasing order are:\\\\" << endl;
2396 ost <<
"\\bigskip" << endl;
2399 ost <<
"\\noindent" << endl;
2400 for (i = 0; i < Table.size(); i++) {
2402 for (j = 0; j <= deg; j++) {
2403 ost << T[i * (deg + 1) + j];
2408 ost <<
"$\\\\" << endl;
2414 cout <<
"ring_theory_global::do_make_table_of_irreducible_polynomials after report" << endl;
2423 cout <<
"ring_theory_global::do_make_table_of_irreducible_polynomials written file " << fname <<
" of size "
2434 cout <<
"ring_theory_global::do_make_table_of_irreducible_polynomials done" << endl;
2442 int p_min,
int p_max,
2443 int deg_min,
int deg_max,
2446 int f_v = (verbose_level >= 1);
2449 cout <<
"ring_theory_global::do_search_for_primitive_polynomial_in_range" << endl;
2450 cout <<
"p_min=" << p_min << endl;
2451 cout <<
"p_max=" << p_max << endl;
2452 cout <<
"deg_min=" << deg_min << endl;
2453 cout <<
"deg_max=" << deg_max << endl;
2457 if (deg_min == deg_max && p_min == p_max) {
2463 p_min, deg_min, verbose_level);
2465 cout <<
"poly = " << poly << endl;
2476 cout <<
"ring_theory_global::do_search_for_primitive_polynomial_in_range done" << endl;
2481 int p,
int degree,
int verbose_level)
2483 int f_v = (verbose_level >= 1);
2487 cout <<
"ring_theory_global::search_for_primitive_polynomial_of_given_degree" << endl;
2498 cout <<
"search_for_primitive_polynomial_of_given_degree "
2499 "p=" << p <<
" degree=" << degree << endl;
2507 cout <<
"found a primitive polynomial. The rank is " << rk << endl;
2511 for (i = rk.
len() - 1, j = 0; i >= 0; i--, j++) {
2512 s[j] =
'0' + rk.
rep()[i];
2517 cout <<
"created string " << s << endl;
2521 cout <<
"ring_theory_global::search_for_primitive_polynomial_of_given_degree done" << endl;
2528 int p_min,
int p_max,
int n_min,
int n_max,
2531 int f_v = (verbose_level >= 1);
2540 cout <<
"ring_theory_global::search_for_primitive_polynomials "
2541 "p_min=" << p_min <<
" p_max=" << p_max
2542 <<
" n_min=" << n_min <<
" n_max=" << n_max << endl;
2544 for (q = p_min; q <= p_max; q++) {
2552 cout <<
"ring_theory_global::search_for_primitive_polynomials "
2553 "considering the coefficient field of order " << q << endl;
2566 for (d = n_min; d <= n_max; d++) {
2568 cout <<
"d=" << d << endl;
2573 cout <<
"\"" << rk <<
"\", // ";
2578 cout <<
"ring_theory_global::search_for_primitive_polynomials "
2579 "before FX.delete_object(m)" << endl;
2583 cout <<
"ring_theory_global::search_for_primitive_polynomials "
2584 "after FX.delete_object(m)" << endl;
2589 cout <<
"ring_theory_global::search_for_primitive_polynomials done" << endl;
2595 int *coeffs,
int f_poly, std::string &poly,
int verbose_level)
2597 int f_v = (verbose_level >= 1);
2598 int p, e, m, i, j, Q, a, b, c, cv, ccv, t, r1, r2, len;
2599 int field_degree, subgroup_index;
2606 cout <<
"ring_theory_global::factor_cyclotomic q=" << q <<
" p=" << q
2607 <<
" e=" << e <<
" n=" << n << endl;
2611 cout <<
"ring_theory_global::factor_cyclotomic order mod q is m=" << m << endl;
2613 field_degree = e * m;
2627 subgroup_index = (Q - 1) / (q - 1);
2635 cout <<
"ring_theory_global::factor_cyclotomic "
2636 "embedding the coefficients into the larger field" << endl;
2637 for (i = 0; i <= d; i++) {
2644 t = a * subgroup_index;
2651 for (i = 0; i <= d; i++) {
2652 FQX.
s_i(h, i) = coeffs[i];
2657 cout <<
"ring_theory_global::factor_cyclotomic "
2658 "the polynomial is: ";
2670 int beta = (Q - 1) / n, Beta;
2675 cout <<
"ring_theory_global::factor_cyclotomic "
2676 "the primitive n-th root of unity we choose "
2677 "is beta = alpha^" << beta <<
" = " << Beta << endl;
2682 for (a = 0; a < n; a++) {
2684 t = FQ.
power(Beta, a);
2686 FQX.
s_i(Xma, 1) = 1;
2688 b = FQX.
s_i(rem, 0);
2690 cout <<
"ring_theory_global::factor_cyclotomic "
2691 "zero Beta^" << a <<
" log "
2693 roots[nb_roots++] = a;
2703 for (c = 0; c < n; c++) {
2706 C.
create(c, __FILE__, __LINE__);
2707 N.
create(n, __FILE__, __LINE__);
2711 cout << c <<
" : " << cv <<
" : ";
2713 if ((-ccv % n) != n - 1) {
2714 cout <<
"ring_theory_global::factor_cyclotomic "
2715 "error: c=" << c <<
" cv=" << cv << endl;
2719 else if ((ccv % n) != 1) {
2720 cout <<
"ring_theory_global::factor_cyclotomic "
2721 "error: c=" << c <<
" cv=" << cv << endl;
2724 for (i = 0; i < nb_roots; i++) {
2725 roots2[i] = (cv * roots[i]) % n;
2726 while (roots2[i] < 0) {
2732 for (i = 0; i < nb_roots; i++) {
2734 for (j = i + 1; j < i + nb_roots; j++) {
2735 r2 = roots2[j % nb_roots];
2743 for (i = 0; i < nb_roots; i++) {
2744 cout << roots2[i] <<
" ";
2746 cout <<
" : " << t << endl;
2755 int f_v = (verbose_level >= 1);
2760 cout <<
"ring_theory_global::oval_polynomial" << endl;
2763 for (i = 0; i < F->
q; i++) {
2765 v, 1 , 3 , S[2 + i]);
2767 cout <<
"ring_theory_global::oval_polynomial "
2768 "not an affine point" << endl;
2777 cout <<
"the map" << endl;
2778 for (i = 0; i < F->
q; i++) {
2779 cout << map[i] <<
" ";
2788 cout <<
"ring_theory_global::oval_polynomial done" << endl;
2793 ostream &ost,
int *factors,
int len)
2804void finite_field::do_ideal(
int n,
2805 long int *set_in,
int set_size,
int degree,
2806 long int *&set_out,
int &size_out,
2810 int f_v = (verbose_level >= 1);
2821 cout <<
"finite_field::do_ideal" << endl;
2826 HPD =
NEW_OBJECT(homogeneous_polynomial_domain);
2829 cout <<
"finite_field::do_ideal before HPD->init" << endl;
2831 HPD->
init(
this, n + 1, degree,
2833 Monomial_ordering_type,
2836 cout <<
"finite_field::do_ideal after HPD->init" << endl;
2844 cout <<
"finite_field::do_ideal before HPD->vanishing_ideal" << endl;
2849 cout <<
"finite_field::do_ideal after HPD->vanishing_ideal" << endl;
2853 cout <<
"The system has rank " << r << endl;
2854 cout <<
"The ideal has dimension " << ns << endl;
2855 cout <<
"and is generated by:" << endl;
2857 cout <<
"corresponding to the following basis "
2858 "of polynomials:" << endl;
2859 for (h = 0; h < ns; h++) {
2864 cout <<
"looping over all generators of the ideal:" << endl;
2865 for (h = 0; h < ns; h++) {
2866 cout <<
"generator " << h <<
" / " << ns <<
":" << endl;
2868 vector<long int> Points;
2872 Points, verbose_level);
2873 nb_pts = Points.size();
2876 for (i = 0; i < nb_pts; i++) {
2881 cout <<
"We found " << nb_pts <<
" points on the generator of the ideal" << endl;
2882 cout <<
"They are : ";
2893 for (u = 0; u < size_out; u++) {
2905 cout <<
"looping over all elements of the ideal:" << endl;
2906 N = Gg.nb_PG_elements(ns - 1, q);
2907 for (h = 0; h < N; h++) {
2908 PG_element_unrank_modified(w1, 1, ns, h);
2909 cout <<
"element " << h <<
" / " << N <<
" w1=";
2910 int_vec_print(cout, w1, ns);
2915 cout <<
" We found " << nb_pts <<
" points on this curve" << endl;
various functions related to coding theory
void print_polynomial(ring_theory::unipoly_domain &Fq, int degree, ring_theory::unipoly_object *coeffs)
a collection of combinatorial functions
void unrank_k_subset(int rk, int *set, int n, int k)
int int_vec_first_regular_word(int *v, int len, int q)
int int_vec_next_regular_word(int *v, int len, int q)
void matrix_print(int *p, int m, int n)
void vec_print(std::vector< std::vector< int > > &p)
void print(std::ostream &ost, long int *v, int len)
a collection of functions related to sorted vectors
void int_vec_quicksort_increasingly(int *v, int len)
int lint_vec_search(long int *v, int len, long int a, int &idx, int verbose_level)
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)
void PG_element_rank_modified(int *v, int stride, int len, int &a)
void PG_element_unrank_modified(int *v, int stride, int len, int a)
void display_table_of_projective_points(std::ostream &ost, long int *Pts, int nb_pts, int len)
int mult3(int a1, int a2, int a3)
void finite_field_init(int q, int f_without_tables, int verbose_level)
void init_override_polynomial(int q, std::string &poly, int f_without_tables, int verbose_level)
linear_algebra::linear_algebra * Linear_algebra
void compute_subfields(int verbose_level)
various functions related to geometries
long int AG_element_rank(int q, int *v, int stride, int len)
void print_set_numerical(std::ostream &ost, long int *set, int set_size)
provides access to pre-computed combinatorial data in encoded form
void get_primitive_polynomial(std::string &poly, int p, int e, int verbose_level)
void mult_vector_from_the_right(int *A, int *v, int *Av, int m, int n)
basic number theoretic functions
long int mod(long int a, long int p)
long int gcd_lint(long int m, long int n)
int i_power_j(int i, int j)
int is_prime_power(int q)
void factor_prime_power(int q, int &p, int &e)
long int order_mod_p(long int a, long int p)
a collection of functions related to file io
long int file_size(std::string &fname)
void lint_vec_write_csv(long int *v, int len, std::string &fname, const char *label)
void read_set_from_file(std::string &fname, long int *&the_set, int &set_size, int verbose_level)
interface to create latex output files
void head(std::ostream &ost, int f_book, int f_title, const char *title, const char *author, int f_toc, int f_landscape, int f_12pt, int f_enlarged_page, int f_pagenumbers, const char *extras_for_preamble)
void foot(std::ostream &ost)
void get_vector_from_label(std::string &label, int *&v, int &sz, int verbose_level)
int longinteger_f_print_scientific
data_structures::lint_vec * Lint_vec
data_structures::int_vec * Int_vec
interface to system functions
void get_date(std::string &str)
homogeneous polynomials of a given degree in a given number of variables over a finite field GF(q)
void init(field_theory::finite_field *F, int nb_vars, int degree, int f_init_incidence_structure, monomial_ordering_type Monomial_ordering_type, int verbose_level)
void unrank_point(int *v, int rk)
int evaluate_at_a_point(int *coeff, int *pt_vec)
int get_monomial(int i, int j)
void print_monomial_ordering(std::ostream &ost)
void enumerate_points(int *coeff, std::vector< long int > &Pts, int verbose_level)
int * read_from_string_coefficient_pairs(std::string &str, int verbose_level)
void print_equation(std::ostream &ost, int *coeffs)
void enumerate_points_zariski_open_set(int *coeff, std::vector< long int > &Pts, int verbose_level)
geometry::projective_space * get_P()
void vanishing_ideal(long int *Pts, int nb_pts, int &r, int *Kernel, int verbose_level)
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)
void multiply_up(longinteger_object &a, int *x, int len, 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 create_qnm1(longinteger_object &a, int q, int n)
void power_int(longinteger_object &a, int n)
void factor_into_longintegers(longinteger_object &a, int &nb_primes, longinteger_object *&primes, int *&exponents, int verbose_level)
a class to represent arbitrary precision integers
void create(long int i, const char *file, int line)
void polynomial_division_with_report(field_theory::finite_field *F, long int rk0, long int rk1, int verbose_level)
void create_projective_variety(field_theory::finite_field *F, std::string &variety_label, std::string &variety_label_tex, int variety_nb_vars, int variety_degree, std::string &variety_coeffs, monomial_ordering_type Monomial_ordering_type, std::string &label_txt, std::string &label_tex, int &nb_pts, long int *&Pts, int verbose_level)
void polynomial_division_from_file_all_k_error_patterns_with_report(field_theory::finite_field *F, std::string &input_file, long int rk1, int k, int verbose_level)
void write_code_for_division(field_theory::finite_field *F, std::string &fname_code, std::string &A_coeffs, std::string &B_coeffs, int verbose_level)
void make_all_irreducible_polynomials_of_degree_d(field_theory::finite_field *F, int d, std::vector< std::vector< int > > &Table, int verbose_level)
void polynomial_division(field_theory::finite_field *F, std::string &A_coeffs, std::string &B_coeffs, int verbose_level)
char * search_for_primitive_polynomial_of_given_degree(int p, int degree, int verbose_level)
void sift_polynomials(field_theory::finite_field *F, long int rk0, long int rk1, int verbose_level)
void do_make_table_of_irreducible_polynomials(field_theory::finite_field *F, int deg, int verbose_level)
void oval_polynomial(field_theory::finite_field *F, int *S, unipoly_domain &D, unipoly_object &poly, int verbose_level)
int count_all_irreducible_polynomials_of_degree_d(field_theory::finite_field *F, int d, int verbose_level)
void create_intersection_of_zariski_open_sets(field_theory::finite_field *F, std::string &variety_label_txt, std::string &variety_label_tex, int variety_nb_vars, int variety_degree, std::vector< std::string > &Variety_coeffs, monomial_ordering_type Monomial_ordering_type, std::string &label_txt, std::string &label_tex, int &nb_pts, long int *&Pts, int verbose_level)
void print_longinteger_after_multiplying(std::ostream &ost, int *factors, int len)
void polynomial_division_from_file_with_report(field_theory::finite_field *F, std::string &input_file, long int rk1, int verbose_level)
void extended_gcd_for_polynomials(field_theory::finite_field *F, std::string &A_coeffs, std::string &B_coeffs, int verbose_level)
void mult_polynomials(field_theory::finite_field *F, long int rk0, long int rk1, int verbose_level)
void factor_cyclotomic(int n, int q, int d, int *coeffs, int f_poly, std::string &poly, int verbose_level)
void create_irreducible_polynomial(field_theory::finite_field *F, unipoly_domain *Fq, unipoly_object *&Beta, int n, long int *cyclotomic_set, int cylotomic_set_size, unipoly_object *&generator, int verbose_level)
void search_for_primitive_polynomials(int p_min, int p_max, int n_min, int n_max, int verbose_level)
void compute_nth_roots_as_polynomials(field_theory::finite_field *F, unipoly_domain *FpX, unipoly_domain *Fq, unipoly_object *&Beta, int n1, int n2, int verbose_level)
void polynomial_mult_mod(field_theory::finite_field *F, std::string &A_coeffs, std::string &B_coeffs, std::string &M_coeffs, int verbose_level)
void create_projective_curve(field_theory::finite_field *F, std::string &variety_label_txt, std::string &variety_label_tex, int curve_nb_vars, int curve_degree, std::string &curve_coeffs, monomial_ordering_type Monomial_ordering_type, std::string &label_txt, std::string &label_tex, int &nb_pts, long int *&Pts, int verbose_level)
void do_search_for_primitive_polynomial_in_range(int p_min, int p_max, int deg_min, int deg_max, int verbose_level)
void compute_powers(field_theory::finite_field *F, unipoly_domain *Fq, int n, int start_idx, unipoly_object *&Beta, int verbose_level)
void number_of_conditions_satisfied(field_theory::finite_field *F, std::string &variety_label_txt, std::string &variety_label_tex, int variety_nb_vars, int variety_degree, std::vector< std::string > &Variety_coeffs, monomial_ordering_type Monomial_ordering_type, std::string &number_of_conditions_satisfied_fname, std::string &label_txt, std::string &label_tex, int &nb_pts, long int *&Pts, int verbose_level)
void polynomial_find_roots(field_theory::finite_field *F, std::string &A_coeffs, int verbose_level)
domain of polynomials in one variable over a finite field
int substitute_scalar_in_polynomial(unipoly_object &p, int scalar, int verbose_level)
void add(unipoly_object a, unipoly_object b, unipoly_object &c)
void delete_object(unipoly_object &p)
void power_int(unipoly_object &a, int n, int verbose_level)
void get_a_primitive_polynomial(unipoly_object &m, int f, int verbose_level)
void mult_easy_with_report(long int rk_a, long int rk_b, long int &rk_c, std::ostream &ost, int verbose_level)
int is_primitive(unipoly_object &m, longinteger_object &qm1, int nb_primes, longinteger_object *primes, int verbose_level)
void mult_mod(unipoly_object a, unipoly_object b, unipoly_object &c, unipoly_object m, int verbose_level)
void division_with_remainder_from_file_all_k_bit_error_patterns(std::string &input_fname, long int rk_b, int k, long int *&rk_q, long int *&rk_r, int &n, int &N, std::ostream &ost, int verbose_level)
void mult(unipoly_object a, unipoly_object b, unipoly_object &c, int verbose_level)
void compute_normal_basis(int d, int *Normal_basis, int *Frobenius, int verbose_level)
int & s_i(unipoly_object p, int i)
void extended_gcd(unipoly_object m, unipoly_object n, unipoly_object &u, unipoly_object &v, unipoly_object &g, int verbose_level)
void minimum_polynomial_extension_field(unipoly_object &g, unipoly_object m, unipoly_object &minpol, int d, int *Frobenius, int verbose_level)
void create_object_of_degree(unipoly_object &p, int d)
void division_with_remainder_from_file_with_report(std::string &input_fname, long int rk_b, long int &rk_q, long int &rk_r, std::ostream &ost, int verbose_level)
void division_with_remainder(unipoly_object a, unipoly_object b, unipoly_object &q, unipoly_object &r, int verbose_level)
int is_irreducible(unipoly_object a, int verbose_level)
int degree(unipoly_object p)
void Frobenius_matrix(int *&Frob, unipoly_object factor_polynomial, int verbose_level)
void create_object_by_rank(unipoly_object &p, long int rk, const char *file, int line, int verbose_level)
void create_Dickson_polynomial(unipoly_object &p, int *map)
void division_with_remainder_numerically_with_report(long int rk_a, long int rk_b, long int &rk_q, long int &rk_r, std::ostream &ost, int verbose_level)
void create_object_by_rank_string(unipoly_object &p, std::string &rk, int verbose_level)
void negate(unipoly_object a)
void rank_longinteger(unipoly_object p, longinteger_object &rank)
void assign(unipoly_object a, unipoly_object &b, int verbose_level)
void print_object(unipoly_object p, std::ostream &ost)
#define Lint_vec_copy(A, B, C)
#define Int_vec_scan(A, B, C)
#define Int_vec_zero(A, B)
#define Int_matrix_print(A, B, C)
#define NEW_OBJECTS(type, n)
#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