Orbiter 2022
Combinatorial Objects
finite_field_activity.cpp
Go to the documentation of this file.
1/*
2 * finite_field_activity.cpp
3 *
4 * Created on: Nov 4, 2020
5 * Author: betten
6 */
7
8
9
10
11
12#include "foundations.h"
13
14using namespace std;
15
16
17
18namespace orbiter {
19namespace layer1_foundations {
20namespace field_theory {
21
22
23
25{
26 Descr = NULL;
27 F = NULL;
28 F_secondary = NULL;
29}
30
32{
33}
34
36 finite_field *F,
37 int verbose_level)
38{
39 int f_v = (verbose_level >= 1);
40
41 if (f_v) {
42 cout << "finite_field_activity::init" << endl;
43 }
44
47 if (f_v) {
48 cout << "finite_field_activity::init done" << endl;
49 }
50}
51
53{
54 int f_v = (verbose_level >= 1);
55
56 if (f_v) {
57 cout << "finite_field_activity::perform_activity" << endl;
58 }
59
60
62
64
65 Algebra.do_cheat_sheet_GF(F, verbose_level);
66 }
68
70
75 verbose_level);
76 }
77 else if (Descr->f_polynomial_division) {
78
80
83 verbose_level);
84 }
86
88
91 verbose_level);
92 }
93
94 else if (Descr->f_polynomial_mult_mod) {
95
97
100 Descr->polynomial_mult_mod_M, verbose_level);
101 }
102 else if (Descr->f_Berlekamp_matrix) {
103
105
107 Descr->Berlekamp_matrix_coeffs, verbose_level);
108
109 }
110 else if (Descr->f_normal_basis) {
111
113
115 Descr->normal_basis_d, verbose_level);
116
117 }
118 else if (Descr->f_polynomial_find_roots) {
119
121
124 verbose_level);
125 }
126
127 else if (Descr->f_nullspace) {
128
130 int *v;
131 int m, n;
132
134
135 LA.do_nullspace(F,
136 v, m, n,
138 Descr->f_normalize_from_the_right, verbose_level);
139
140 FREE_int(v);
141
142 }
143 else if (Descr->f_RREF) {
144
146 int *v;
147 int m, n;
148
150
151 LA.do_RREF(F,
152 v, m, n,
155 verbose_level);
156
157 FREE_int(v);
158
159 }
160 else if (Descr->f_weight_enumerator) {
161
163
164 int *v;
165 int m, n;
166
168
169
171 v, m, n,
174 verbose_level);
175
176 FREE_int(v);
177 }
178
180
182
185 Descr->Walsh_Hadamard_transform_n, verbose_level);
186 }
187
188
189 else if (Descr->f_algebraic_normal_form) {
190
192
193 Algebra.algebraic_normal_form(F,
195 Descr->algebraic_normal_form_n, verbose_level);
196 }
197
198
199 else if (Descr->f_apply_trace_function) {
200
202
203 Algebra.apply_trace_function(F,
205 }
206
207 else if (Descr->f_apply_power_function) {
208
210
211 Algebra.apply_power_function(F,
214 verbose_level);
215 }
216
217 else if (Descr->f_identity_function) {
218
220
221 Algebra.identity_function(F,
222 Descr->identity_function_fname_csv_out, verbose_level);
223 }
224
225
226 else if (Descr->f_trace) {
227
229
230 Algebra.do_trace(F, verbose_level);
231 }
232 else if (Descr->f_norm) {
233
235
236 Algebra.do_norm(F, verbose_level);
237 }
238 else if (Descr->f_Walsh_matrix) {
239
241 int *W = NULL;
242
243 Algebra.Walsh_matrix(F, Descr->Walsh_matrix_n, W, verbose_level);
244 FREE_int(W);
245 }
246 else if (Descr->f_Vandermonde_matrix) {
247
249 int *W = NULL;
250 int *W_inv = NULL;
251
252 Algebra.Vandermonde_matrix(F, W, W_inv, verbose_level);
253
254 if (F->q < 33) {
255 cout << "Vandermonde:" << endl;
256 Int_matrix_print(W, F->q, F->q);
257 cout << "Vandermonde inverse:" << endl;
258 Int_matrix_print(W_inv, F->q, F->q);
259
261
262 cout << "Vandermonde:" << endl;
263
264 cout << "$$" << endl;
265 cout << "\\left[" << endl;
266 LI.int_matrix_print_tex(cout, W, F->q, F->q);
267 cout << "\\right]" << endl;
268 cout << "$$" << endl;
269
270 cout << "Vandermonde inverse:" << endl;
271 cout << "$$" << endl;
272 cout << "\\left[" << endl;
273 LI.int_matrix_print_tex(cout, W_inv, F->q, F->q);
274 cout << "\\right]" << endl;
275 cout << "$$" << endl;
276
277
278 }
279 else {
280 cout << "too big to print" << endl;
281 }
282
283 FREE_int(W);
284 FREE_int(W_inv);
285 }
286 else if (Descr->f_search_APN_function) {
287
289
290 Algebra.search_APN(F, verbose_level);
291
292 }
293
294
295
297
298
300
303 verbose_level);
304
305 }
306 else if (Descr->f_EC_Koblitz_encoding) {
307
309
311 Descr->EC_s, Descr->EC_pt_text, Descr->EC_message, verbose_level);
312 }
313 else if (Descr->f_EC_points) {
314
316
317 Crypto.do_EC_points(F, Descr->EC_label, Descr->EC_b, Descr->EC_c, verbose_level);
318 }
319 else if (Descr->f_EC_add) {
320
322
323 Crypto.do_EC_add(F, Descr->EC_b, Descr->EC_c,
324 Descr->EC_pt1_text, Descr->EC_pt2_text, verbose_level);
325 }
326 else if (Descr->f_EC_cyclic_subgroup) {
327
329
331 Descr->EC_pt_text, verbose_level);
332 }
333 else if (Descr->f_EC_multiple_of) {
334
336
338 Descr->EC_pt_text, Descr->EC_multiple_of_n, verbose_level);
339 }
340 else if (Descr->f_EC_discrete_log) {
341
343
345 Descr->EC_discrete_log_pt_text, verbose_level);
346 }
348
350
353 verbose_level);
354 }
356
358
362 verbose_level);
363 }
364 else if (Descr->f_NTRU_encrypt) {
365
367
371 verbose_level);
372 }
374
376
378 verbose_level);
379 }
381
383
385 verbose_level);
386 }
387 else if (Descr->f_cheat_sheet_PG) {
388
390
392
393
394 if (!orbiter_kernel_system::Orbiter->f_draw_options) {
395 cout << "please use option -draw_options .. -end" << endl;
396 exit(1);
397 }
399
401 verbose_level);
402 }
403 else if (Descr->f_cheat_sheet_Gr) {
404
406
408 verbose_level);
409 }
410 else if (Descr->f_cheat_sheet_hermitian) {
411
413
416 verbose_level);
417 }
419
421
422 if (F_secondary == NULL) {
423 cout << "F_secondary == NULL" << endl;
424 exit(1);
425 }
428 verbose_level);
429 }
430 else if (Descr->f_find_CRC_polynomials) {
431
433
434 Coding.find_CRC_polynomials(F,
438 verbose_level);
439 }
440
441 else if (Descr->f_sift_polynomials) {
442
444
448 verbose_level);
449 }
450
451 else if (Descr->f_mult_polynomials) {
452
454
458 verbose_level);
459 }
460
462
464
468 verbose_level);
469 }
470
472
474
478 verbose_level);
479 }
480
482
484
489 verbose_level);
490 }
491
492 else if (Descr->f_RREF_random_matrix) {
493
495 int *A;
496 int m, n;
497 int i;
498
501
503
504 A = NEW_int(m * n);
505 for (i = 0; i < m * n; i++) {
506 A[i] = Os.random_integer(F->q);
507 }
508
509 LA.RREF_demo(F,
510 A,
511 m,
512 n,
513 verbose_level);
514
515 FREE_int(A);
516 }
517
518 else if (Descr->f_transversal) {
519
521
522 GG.do_transversal(F,
528 verbose_level);
529 }
531
533
539 verbose_level);
540 }
542
544
547 verbose_level);
548 }
549 else if (Descr->f_rank_point_in_PG) {
550
552
555 verbose_level);
556 }
557
558 else if (Descr->f_field_reduction) {
559
561 finite_field *Fq;
562
565 FALSE /* f_without_tables */, verbose_level);
566 Coding.field_reduction(F, Fq,
570 verbose_level);
571
572 FREE_OBJECT(Fq);
573
574 }
575 else if (Descr->f_parse_and_evaluate) {
576
578
583 TRUE,
585 verbose_level);
586
587 }
588
589
590 else if (Descr->f_product_of) {
591
592 int *data;
593 int sz;
594 int i, a, s;
595
596 if (f_v) {
597 cout << "-product_of " << Descr->product_of_elements
598 << endl;
599 }
600
602 data, sz, verbose_level);
603 s = 1;
604 for (i = 0; i < sz; i++) {
605 a = data[i];
606 s = F->mult(s, a);
607 }
608 if (f_v) {
609 cout << "the product is " << s << endl;
610 }
611
612 }
613 else if (Descr->f_sum_of) {
614
615 int *data;
616 int sz;
617 int i, a, s;
618
619 if (f_v) {
620 cout << "-sum_of " << Descr->sum_of_elements
621 << endl;
622 }
623
625 data, sz, verbose_level);
626 s = 1;
627 for (i = 0; i < sz; i++) {
628 a = data[i];
629 s = F->add(s, a);
630 }
631 if (f_v) {
632 cout << "the sum is " << s << endl;
633 }
634
635 }
636
637 else if (Descr->f_negate) {
638
639 int *data;
640 int sz;
641 int i, a, s;
642
643 if (f_v) {
644 cout << "-negate " << Descr->negate_elements
645 << endl;
646 }
647
649 data, sz, verbose_level);
650 for (i = 0; i < sz; i++) {
651 a = data[i];
652 s = F->negate(a);
653 if (f_v) {
654 cout << "the negative of " << a << " is " << s << endl;
655 }
656
657 }
658
659 }
660
661 else if (Descr->f_inverse) {
662
663 int *data;
664 int sz;
665 int i, a, s;
666
667 if (f_v) {
668 cout << "-inverse " << Descr->inverse_elements
669 << endl;
670 }
671
673 data, sz, verbose_level);
674 for (i = 0; i < sz; i++) {
675 a = data[i];
676 s = F->negate(a);
677 if (f_v) {
678 cout << "the inverse of " << a << " is " << s << endl;
679 }
680
681 }
682
683 }
684
685 else if (Descr->f_power_map) {
686
687 int *data;
688 int sz;
689 int i, a, s;
690
691 if (f_v) {
692 cout << "-power_map " << Descr->power_map_elements
693 << endl;
694 }
695
697 data, sz, verbose_level);
698
699 if (f_v) {
700 cout << "a : a^k" << endl;
701 }
702
703 for (i = 0; i < sz; i++) {
704 a = data[i];
705 s = F->power(a, Descr->power_map_k);
706 if (f_v) {
707 cout << a << " : " << s << endl;
708 }
709
710 }
711
712 }
713
714
715
716 else if (Descr->f_evaluate) {
717
718 cout << "before evaluate" << endl;
719
721
722 ED.evaluate(F,
725 verbose_level);
726
727 }
729
730 cout << "before generator_matrix_cyclic_code" << endl;
731
733
737 verbose_level);
738
739 }
740
741 else if (Descr->f_nth_roots) {
742 cout << "-nth_roots n=" << Descr->nth_roots_n << endl;
743
744 nth_roots *Nth;
745
746 Nth = NEW_OBJECT(nth_roots);
747
748 Nth->init(F, Descr->nth_roots_n, verbose_level);
749
751 {
752 char str[1000];
753 string fname;
754
755 snprintf(str, 1000, "Nth_roots_q%d_n%d.tex", F->q, Descr->nth_roots_n);
756
757 fname.assign(str);
758
759
760 {
761 ofstream ost(fname);
763
764 char title[1000];
765 char author[1000];
766
767 snprintf(title, 1000, "Nth roots");
768 //strcpy(author, "");
769 author[0] = 0;
770
771
773
774 L.head(ost,
775 FALSE /* f_book*/,
776 TRUE /* f_title */,
777 title, author,
778 FALSE /* f_toc */,
779 FALSE /* f_landscape */,
780 TRUE /* f_12pt */,
781 TRUE /* f_enlarged_page */,
782 TRUE /* f_pagenumbers */,
783 NULL /* extra_praeamble */);
784
785
786 Nth->report(ost, verbose_level);
787
788 L.foot(ost);
789
790
791 }
792
793 cout << "Written file " << fname << " of size " << Fio.file_size(fname) << endl;
794
795 }
796
797 }
798 else if (Descr->f_make_BCH_code) {
799
800#if 0
801 coding_theory_domain Codes;
802 nth_roots *Nth;
804
805 int n;
806 int *Genma;
807 int degree;
808 int *generator_polynomial;
809 int i;
810
812 Codes.make_BCH_code(n, F, Descr->make_BCH_code_d,
813 Nth, P,
814 verbose_level);
815
816 cout << "generator polynomial is:" << endl;
817
818 cout << "-dense \"";
819 Nth->FX->print_object_dense(P, cout);
820 cout << "\"" << endl;
821 cout << endl;
822
823 cout << "-sparse \"";
824 Nth->FX->print_object_sparse(P, cout);
825 cout << "\"" << endl;
826 cout << endl;
827
828 Nth->FX->print_object(P, cout);
829 cout << endl;
830
831 degree = Nth->FX->degree(P);
832 generator_polynomial = NEW_int(degree + 1);
833 for (i = 0; i <= degree; i++) {
834 generator_polynomial[i] = Nth->FX->s_i(P, i);
835 }
836
837 Codes.generator_matrix_cyclic_code(n,
838 degree, generator_polynomial, Genma);
839
840 int k = n - degree;
841
842#if 0
843 cout << "generator matrix:" << endl;
845 k, n, n, F->log10_of_q);
846#endif
847
848#else
850
852
854 Descr->make_BCH_code_d, verbose_level);
855
857#if 0
858 {
859 char str[1000];
860 string fname;
861
862 fname.assign("genma_BCH");
863 sprintf(str, "_n%d", n);
864 fname.append(str);
865 sprintf(str, "_k%d", k);
866 fname.append(str);
867 sprintf(str, "_q%d", F->q);
868 fname.append(str);
869 fname.append(".csv");
870
871 Fio.int_matrix_write_csv(fname, Genma, k, n);
872
873 cout << "Written file " << fname << " of size " << Fio.file_size(fname) << endl;
874 }
875#endif
876 {
877 char str[1000];
878 string fname;
879
880 snprintf(str, 1000, "BCH_codes_q%d_n%d_d%d.tex",
881 F->q,
884 );
885
886 fname.assign(str);
887
888
889 {
890 ofstream ost(fname);
892
893 char title[1000];
894 char author[1000];
895
896 snprintf(title, 1000, "BCH codes");
897 //strcpy(author, "");
898 author[0] = 0;
899
900
902
903 L.head(ost,
904 FALSE /* f_book*/,
905 TRUE /* f_title */,
906 title, author,
907 FALSE /* f_toc */,
908 FALSE /* f_landscape */,
909 TRUE /* f_12pt */,
910 TRUE /* f_enlarged_page */,
911 TRUE /* f_pagenumbers */,
912 NULL /* extra_praeamble */);
913
914
915 C->report(ost, verbose_level);
916
917 L.foot(ost);
918
919
920 }
921
922 cout << "Written file " << fname << " of size " << Fio.file_size(fname) << endl;
923
924 }
925
926#endif
927
928 }
930
932 nth_roots *Nth;
934
935 int n;
936 //int *Genma;
937 int degree;
938 int *generator_polynomial;
939 int i;
940
942
944 Nth, P,
945 verbose_level);
946
947 cout << "generator polynomial is ";
948 Nth->FX->print_object(P, cout);
949 cout << endl;
950
951 degree = Nth->FX->degree(P);
952 generator_polynomial = NEW_int(degree + 1);
953 for (i = 0; i <= degree; i++) {
954 generator_polynomial[i] = Nth->FX->s_i(P, i);
955 }
956
957 // Descr->make_BCH_code_and_encode_text
958
959 Codes.CRC_encode_text(Nth, P,
962 verbose_level);
963
964
965 }
966 else if (Descr->f_NTT) {
968
969 NTT.init(F, Descr->NTT_n, Descr->NTT_q, verbose_level);
970
971 }
972
973
974
975
976
977 if (f_v) {
978 cout << "finite_field_activity::perform_activity done" << endl;
979 }
980
981}
982
983
984
985
986
987
988}}}
989
990
global functions related to finite fields, irreducible polynomials and such
Definition: algebra.h:130
void apply_power_function(field_theory::finite_field *F, std::string &fname_csv_in, long int d, int verbose_level)
void Walsh_matrix(field_theory::finite_field *F, int n, int *&W, int verbose_level)
void do_norm(field_theory::finite_field *F, int verbose_level)
void algebraic_normal_form(field_theory::finite_field *F, std::string &fname_csv_in, int n, int verbose_level)
void search_APN(field_theory::finite_field *F, int verbose_level)
void do_cheat_sheet_GF(field_theory::finite_field *F, int verbose_level)
void apply_trace_function(field_theory::finite_field *F, std::string &fname_csv_in, int verbose_level)
void apply_Walsh_Hadamard_transform(field_theory::finite_field *F, std::string &fname_csv_in, int n, int verbose_level)
void Vandermonde_matrix(field_theory::finite_field *F, int *&W, int *&W_inv, int verbose_level)
void do_trace(field_theory::finite_field *F, int verbose_level)
void identity_function(field_theory::finite_field *F, std::string &fname_csv_out, int verbose_level)
void field_reduction(field_theory::finite_field *FQ, field_theory::finite_field *Fq, std::string &label, int m, int n, std::string &genma_text, int verbose_level)
void CRC_encode_text(field_theory::nth_roots *Nth, ring_theory::unipoly_object &CRC_poly, std::string &text, std::string &fname, int verbose_level)
void find_CRC_polynomials(field_theory::finite_field *F, int t, int da, int dc, int verbose_level)
void generator_matrix_cyclic_code(field_theory::finite_field *F, int n, std::string &poly_coeffs, int verbose_level)
void do_weight_enumerator(field_theory::finite_field *F, int *M, int m, int n, int f_normalize_from_the_left, int f_normalize_from_the_right, int verbose_level)
void make_BCH_code(int n, field_theory::finite_field *F, int d, field_theory::nth_roots *&Nth, ring_theory::unipoly_object &P, int verbose_level)
void report(std::ostream &ost, int verbose_level)
void init(field_theory::finite_field *F, int n, int d, int verbose_level)
a collection of functions related to cryptography
Definition: cryptography.h:25
void do_EC_discrete_log(field_theory::finite_field *F, int EC_b, int EC_c, std::string &base_pt_text, std::string &pt_text, int verbose_level)
void do_EC_Koblitz_encoding(field_theory::finite_field *F, int EC_b, int EC_c, int EC_s, std::string &pt_text, std::string &EC_message, int verbose_level)
void do_EC_baby_step_giant_step(field_theory::finite_field *F, int EC_b, int EC_c, std::string &EC_bsgs_G, int EC_bsgs_N, std::string &EC_bsgs_cipher_text, int verbose_level)
void NTRU_encrypt(int N, int p, field_theory::finite_field *Fq, std::string &H_coeffs, std::string &R_coeffs, std::string &Msg_coeffs, int verbose_level)
void do_EC_cyclic_subgroup(field_theory::finite_field *F, int EC_b, int EC_c, std::string &pt_text, int verbose_level)
void polynomial_center_lift(std::string &A_coeffs, field_theory::finite_field *F, int verbose_level)
void polynomial_reduce_mod_p(std::string &A_coeffs, field_theory::finite_field *F, int verbose_level)
void do_EC_baby_step_giant_step_decode(field_theory::finite_field *F, int EC_b, int EC_c, std::string &EC_bsgs_A, int EC_bsgs_N, std::string &EC_bsgs_cipher_text_T, std::string &EC_bsgs_keys, int verbose_level)
void do_EC_points(field_theory::finite_field *F, std::string &label, int EC_b, int EC_c, int verbose_level)
void do_EC_add(field_theory::finite_field *F, int EC_b, int EC_c, std::string &pt1_text, std::string &pt2_text, int verbose_level)
void do_EC_multiple_of(field_theory::finite_field *F, int EC_b, int EC_c, std::string &pt_text, int n, int verbose_level)
void print_integer_matrix_width(std::ostream &ost, int *p, int m, int n, int dim_n, int w)
Definition: int_vec.cpp:852
void parse_and_evaluate(field_theory::finite_field *F, std::string &name_of_formula, std::string &formula_text, std::string &managed_variables, int f_evaluate, std::string &parameters, int verbose_level)
void evaluate(field_theory::finite_field *Fq, std::string &formula_label, std::string &parameters, int verbose_level)
void init(finite_field_activity_description *Descr, finite_field *F, int verbose_level)
void finite_field_init(int q, int f_without_tables, int verbose_level)
the nth roots over Fq using an extension field
void report(std::ostream &ost, int verbose_level)
Definition: nth_roots.cpp:560
void init(finite_field *F, int n, int verbose_level)
Definition: nth_roots.cpp:62
various functions related to geometries
Definition: geometry.h:721
void do_create_desarguesian_spread(field_theory::finite_field *FQ, field_theory::finite_field *Fq, int m, int verbose_level)
void do_cheat_sheet_hermitian(field_theory::finite_field *F, int projective_dimension, int verbose_level)
void do_transversal(field_theory::finite_field *F, std::string &line_1_basis, std::string &line_2_basis, std::string &point, int f_normalize_from_the_left, int f_normalize_from_the_right, int verbose_level)
void do_intersection_of_two_lines(field_theory::finite_field *F, std::string &line_1_basis, std::string &line_2_basis, int f_normalize_from_the_left, int f_normalize_from_the_right, int verbose_level)
void do_inverse_isomorphism_klein_quadric(field_theory::finite_field *F, std::string &inverse_isomorphism_klein_quadric_matrix_A6, int verbose_level)
void do_rank_points_in_PG(field_theory::finite_field *F, std::string &label, int verbose_level)
void do_cheat_sheet_Gr(field_theory::finite_field *F, int n, int k, int verbose_level)
void do_cheat_sheet_PG(field_theory::finite_field *F, graphics::layered_graph_draw_options *O, int n, int verbose_level)
options for drawing an object of type layered_graph
Definition: graphics.h:457
void do_nullspace(field_theory::finite_field *F, int *M, int m, int n, int f_normalize_from_the_left, int f_normalize_from_the_right, int verbose_level)
void compute_normal_basis(field_theory::finite_field *F, int d, int verbose_level)
void Berlekamp_matrix(field_theory::finite_field *F, std::string &Berlekamp_matrix_coeffs, int verbose_level)
void RREF_demo(field_theory::finite_field *F, int *A, int m, int n, int verbose_level)
void do_RREF(field_theory::finite_field *F, int *M, int m, int n, int f_normalize_from_the_left, int f_normalize_from_the_right, int verbose_level)
void init(field_theory::finite_field *F, int k, int q, int verbose_level)
void int_matrix_write_csv(std::string &fname, int *M, int m, int n)
Definition: file_io.cpp:1300
void int_matrix_print_tex(std::ostream &ost, int *p, int m, int n)
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 get_vector_from_label(std::string &label, int *&v, int &sz, int verbose_level)
void get_matrix_from_label(std::string &label, int *&v, int &m, int &n)
void polynomial_division_with_report(field_theory::finite_field *F, long int rk0, long int rk1, 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 polynomial_division(field_theory::finite_field *F, std::string &A_coeffs, std::string &B_coeffs, 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 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 polynomial_mult_mod(field_theory::finite_field *F, std::string &A_coeffs, std::string &B_coeffs, std::string &M_coeffs, int verbose_level)
void polynomial_find_roots(field_theory::finite_field *F, std::string &A_coeffs, int verbose_level)
void print_object_dense(unipoly_object p, std::ostream &ost)
void print_object_sparse(unipoly_object p, std::ostream &ost)
void print_object(unipoly_object p, std::ostream &ost)
#define FREE_int(p)
Definition: foundations.h:640
#define NEW_OBJECT(type)
Definition: foundations.h:638
#define FREE_OBJECT(p)
Definition: foundations.h:651
#define NEW_int(n)
Definition: foundations.h:625
#define Int_matrix_print(A, B, C)
Definition: foundations.h:707
#define TRUE
Definition: foundations.h:231
#define FALSE
Definition: foundations.h:234
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects