15namespace layer2_discreta {
18#undef CHANGE_KIND_VERBOSE
30 cout <<
"unipoly::copy constructor for object: "
72 cout <<
"unipoly::copyobject_to()" << endl;
76 x.as_unipoly().settype_unipoly();
78 x.as_unipoly().print_as_vector(cout);
89 int d, i, f_print_k,
k, f_prev =
FALSE;
92 int f_nothing_printed_at_all =
TRUE;
104 for (i = d; i >= 0; i--) {
109 if (i == 0 && f_nothing_printed_at_all) {
114 f_nothing_printed_at_all =
FALSE;
128 f_nothing_printed_at_all =
FALSE;
130 if (coef.
is_one() && i > 0)
159 ost <<
"{" << i <<
"}";
189 for (i = l - 1; i >= 0; i--) {
201 int d1, d2, d3, i, j,
k;
204 cout <<
"unipoly::mult_to() this not a unipoly" << endl;
208 cout <<
"unipoly::mult_to() x is not a unipoly" << endl;
218 for (i = 0; i <= d3; i++) {
221 for (i = 0; i <= d1; i++) {
222 for (j = 0; j <= d2; j++) {
239 cout <<
"unipoly::add_to() this not a unipoly" << endl;
243 cout <<
"unipoly::add_to() x is not a unipoly" << endl;
253 for (i = 0; i <= d1; i++) {
256 for (; i <= d3; i++) {
259 for (i = 0; i <= d2; i++) {
271 cout <<
"unipoly::negate_to() this is not a unipoly" << endl;
276 for (i = 0; i < l; i++) {
306 for (j = 0; j < i; j++) {
349 int f_v = (verbose_level >= 1);
350 int dm, dn, dq, i, j, ii, jj;
356 cout <<
"unipoly::integral_division" << endl;
357 cout <<
"m=" << *
this << endl;
358 cout <<
"n=" <<
x << endl;
364 cout <<
"unipoly::integral_division(): division by zero" << endl;
370 cout <<
"unipoly::integral_division dn > dm, no division possible" << endl;
384 cout <<
"unipoly::integral_division a=" << a << endl;
388 cout <<
"unipoly::integral_division before av.invert" << endl;
392 cout <<
"unipoly::integral_division av=" << av << endl;
394 for (i = dm, j = dq; i >= dn; i--, j--) {
396 cout <<
"unipoly::integral_division i=" << i <<
" j=" << j << endl;
401 cout <<
"unipoly::integral_division b=" << b << endl;
402 cout <<
"unipoly::integral_division av=" << av << endl;
403 cout <<
"unipoly::integral_division before mult" << endl;
409 for (ii = i, jj = dn; jj >= 0; ii--, jj--) {
411 cout <<
"unipoly::integral_division ii=" << ii <<
" jj=" << jj << endl;
417 if (ii == i && !rr[ii].
is_zero()) {
418 cout <<
"unipoly::integral_division(): ii == i && !rr[ii].is_zero()" << endl;
429 cout <<
"q=" << q << endl;
430 cout <<
"r=" << r << endl;
440 for (i = 1; i <= d; i++) {
451 int f_v = (verbose_level >= 1);
458 cout <<
"unipoly::is_squarefree() derivative p' = " << a << endl;
462 cout <<
"unipoly::is_squarefree() gcd(p, p') = " << g << endl;
473 int f_v = (verbose_level >= 1);
481 B.
Berlekamp(*
this, p, verbose_level - 1);
485 cout <<
"has rank " << r << endl;
495 int f_v = (verbose_level = 1);
505 cout <<
"has rank " << r << endl;
527 for (i = 0; i < l; i++) {
545 for (i = 0; i < l; i++) {
566 int f_v = (verbose_level >= 1);
567 int f_vv = (verbose_level >= 2);
568 int m, i, a, b, low, high;
574 cout <<
"unipoly::Singer: p <= 1" << endl;
578 cout <<
"unipoly::Singer: p not prime" << endl;
584 for (b = 0; b < p; b++) {
585 x.singer_candidate(p, f, b, a);
587 cout <<
"singer candidate " <<
x << endl;
589 if (
x.is_irreducible_GFp(p, verbose_level) &&
590 x.is_primitive(m, p, vp, verbose_level)) {
592 cout <<
"OK" << endl;
600 for (i = low; i <= high; i++) {
601 x.numeric_polynomial(i, p);
603 cout <<
"candidate " << i - low + 1 <<
" : " <<
x << endl;
605 if (
x.is_irreducible_GFp(p, f_vv) &&
606 x.is_primitive(m, p, vp, verbose_level)) {
608 cout <<
"OK" << endl;
614 cout <<
"unipoly::Singer did not find an irrducible primitive polynomial" << endl;
620 int f_v = (verbose_level >= 1);
621 int f_vv = (verbose_level >= 2);
628 cout <<
"unipoly::get_an_irreducible_polynomial" << endl;
631 cout <<
"unipoly::get_an_irreducible_polynomial() no finite field domain" << endl;
636 cout <<
"unipoly::get_an_irreducible_polynomial() \n"
637 "searching for an irreducible polynomial of degree " << f <<
638 " over GF(" << q <<
")" << endl;
642 for (i = low; i <= high; i++) {
643 x.numeric_polynomial(i, q);
645 cout <<
"candidate " << i - low + 1 <<
" : " <<
x << endl;
647 if (
x.is_irreducible(q, verbose_level - 2)) {
649 cout <<
"is irreducible" << endl;
652 cout <<
"unipoly::get_an_irreducible_polynomial() " <<
x << endl;
658 cout <<
"unipoly::get_an_irreducible_polynomial() no polynomial found" << endl;
669 for (i = d - 1; i >= 0; i--) {
713 for (i = 0; i < d; i++) {
721 int f_v = (verbose_level >= 1);
731 cout <<
"unipoly::normal_base(): Frobenius:\n" << F << endl;
738 cout <<
"unipoly::normal_base(): V[0]=" << v << endl;
740 for (i = 1; i < f; i++) {
744 cout <<
"unipoly::normal_base(): V["<<i<<
"]=" << v << endl;
749 cout <<
"unipoly::normal_base(): N=\n" << N << endl;
753 matrix T, P, Pv, Q, Qv;
759 T.minus_X_times_id();
761 cout <<
"F - x * Id=\n" << T << endl;
763 T.smith_normal_form(P, Pv, Q, Qv, f_vv,
FALSE);
766 cout <<
"Q=\n" << Q << endl;
771 cout <<
"Q(1)=\n" << Q << endl;
772 cout <<
"F=\n" << F << endl;
779 cout <<
"N[0]=" << b << endl;
781 for (i = 1; i < d; i++) {
786 cout <<
"N[" << i <<
"]=" << b << endl;
791 cout <<
"N=" << N << endl;
800 int f_v = (verbose_level >= 1);
813 cout <<
"regular word:" << v << endl;
817 for (i = 0; i < f; i++) {
827 int f_v = (verbose_level >= 1);
839 cout <<
"regular word:" << v << endl;
843 for (i = 0; i < f; i++) {
853 cout <<
"unipoly::normalize() p not an UNIPOLY" << endl;
878 int i, j, l, mu, d, nd;
882 cout <<
"Phi(" << n <<
"):" << endl;
893 d = multiply(vp, vd);
898 cout <<
"d=" << d <<
" mu(d)=" << mu <<
" r=" << r << endl;
899 cout <<
"p=" << p << endl;
900 cout <<
"q=" << q << endl;
909 for (i = 0; i < l; i++) {
911 if (j < ve.
s_ii(i)) {
930 for (i = 0; i < l; i++) {
940 int f_v = (verbose_level = 1);
941 int f_vv = (verbose_level = 2);
942 int f_vvv = (verbose_level = 3);
949 for (j = n -
k + 1; j <= n; j++) {
956 cout <<
"j=" << j << endl;
960 cout <<
" \\binom{" << n <<
"}{" << j <<
"}=a=" << a << endl;
963 for (h = 0; h <= l; h++) {
969 cout <<
" {j \\choose h} = c=" << c << endl;
974 cout <<
" q^" << l - h + 1 <<
"=" << d << endl;
978 cout <<
" minus 1, d=" << d << endl;
985 cout <<
" c=" << c << endl;
989 cout <<
" new b=" << b << endl;
994 cout <<
" coeff=" << b << endl;
999 cout <<
"unipoly::weight_enumerator_MDS_code "
1000 "n=" << n <<
" k=" <<
k <<
" q=" << q << endl;
1001 cout << *
this << endl;
1007 int f_v = (verbose_level >= 1);
1008 int f_vv = (verbose_level >= 2);
1010 int i, j,
k, a, p, h;
1017 cout <<
"unipoly::charpoly" << endl;
1021 for (i = 0; i < size; i++) {
1022 for (j = 0; j < size; j++) {
1028 cout <<
"M=" << endl;
1033 cout <<
"q is not prime, we need a prime" << endl;
1045 for (i = 0; i < size; i++) {
1047 M2.KX_module_order_ideal(i, mue, verbose_level - 1);
1048 cout <<
"order ideal " << i <<
":" << endl;
1049 cout << mue << endl;
1059 cout <<
"M - x * Id=\n" << M << endl;
1064 cout <<
"the Smith normal form is:" << endl;
1070 cout <<
"P * Pv=\n" << S << endl;
1075 cout <<
"Q * Qv=\n" << S << endl;
1080 cout <<
"T.mult(S, Q):\n";
1084 cout <<
"T=\n" << T << endl;
1095 cout <<
"characteristic polynomial:" <<
charpoly << endl;
1099 cout <<
"has degree " << deg << endl;
1103 cout <<
"leading coefficient " << l << endl;
1107 cout <<
"leading coefficient inverse " << lv << endl;
1109 for (i = 0; i <= deg; i++) {
1115 cout <<
"monic characteristic polynomial:" <<
charpoly << endl;
void finite_field_init(int q, int f_without_tables, int verbose_level)
basic number theoretic functions
int i_power_j(int i, int j)
int is_prime_power(int q)
long int primitive_root(long int p, int verbose_level)
DISCRETA vector class for vectors of DISCRETA objects.
void q_adic(int n, int q)
int next_regular_word(int q)
void first_regular_word(int n, int q)
discreta_base & s_i(int i)
std::ostream & print(std::ostream &)
void copyobject_to(discreta_base &x)
DISCRETA base class. All DISCRETA classes are derived from this class.
void integral_division_exact(discreta_base &x, discreta_base &q)
integer & change_to_integer()
virtual void negate_to(discreta_base &x)
void mult(discreta_base &x, discreta_base &y)
discreta_base & power_int_mod(int l, discreta_base &p)
void swap(discreta_base &a)
void copyobject(discreta_base &x)
discreta_base & power_int(int l)
virtual void homo_z(int z)
void extended_gcd(discreta_base &n, discreta_base &u, discreta_base &v, discreta_base &g, int verbose_level)
void from_vector_of_columns(Vector &v)
discreta_matrix & m_mn(int m, int n)
void KX_module_apply(unipoly &p, Vector &v)
void smith_normal_form(discreta_matrix &P, discreta_matrix &Pv, discreta_matrix &Q, discreta_matrix &Qv, int verbose_level)
void Berlekamp(unipoly &m, int p, int verbose_level)
discreta_base & s_ij(int i, int j)
void elements_to_unipoly()
void to_vector_of_columns(Vector &v)
void m_iji(int i, int j, int a)
void KX_cyclic_module_generator(Vector &v, unipoly &mue, int verbose_level)
void KX_module_minpol(unipoly &p, unipoly &m, unipoly &mue, int verbose_level)
void Frobenius(unipoly &m, int p, int verbose_level)
DISCRETA class for influencing arithmetic operations.
DISCRETA class for polynomials in one variable.
int is_squarefree(int verbose_level)
void singer_candidate(int p, int f, int b, int a)
void normal_base(int p, discreta_matrix &F, discreta_matrix &N, int verbose_level)
void mult_to(discreta_base &x, discreta_base &y)
void integral_division(discreta_base &x, discreta_base &q, discreta_base &r, int verbose_level)
void weight_enumerator_MDS_code(int n, int k, int q, int verbose_level)
void largest_divisor_prime_to(unipoly &q, unipoly &r)
int first_irreducible_polynomial(int p, unipoly &m, discreta_matrix &F, discreta_matrix &N, Vector &v, int verbose_level)
void add_to(discreta_base &x, discreta_base &y)
void numeric_polynomial(int n, int q)
void Singer(int p, int f, int verbose_level)
int next_irreducible_polynomial(int p, unipoly &m, discreta_matrix &F, discreta_matrix &N, Vector &v, int verbose_level)
int is_irreducible_GFp(int p, int verbose_level)
int polynomial_numeric(int q)
unipoly & operator=(const discreta_base &x)
void copyobject_to(discreta_base &x)
int is_irreducible(int q, int verbose_level)
void charpoly(int q, int size, int *mtx, int verbose_level)
void get_an_irreducible_polynomial(int f, int verbose_level)
std::ostream & print_as_vector(std::ostream &ost)
void negate_to(discreta_base &x)
int compare_with_euclidean(discreta_base &a)
std::ostream & print(std::ostream &)
int is_primitive(int m, int p, Vector &vp, int verbose_level)
void evaluate_at(discreta_base &x, discreta_base &y)
void normalize(discreta_base &p)
DISCRETA class related to class domain.
enum printing_mode_enum current_printing_mode()
char my_unip_variable_name[128]
void Binomial(int n, int k, discreta_base &n_choose_k)
int is_finite_field_domain(domain *&d)
int my_unip_f_use_variable_name
void factor_integer(int n, Vector &primes, Vector &exponents)
int finite_field_domain_order_int(domain *d)
the orbiter library for the classification of combinatorial objects