17 mpz_init_set_ui(denom,1);
18 mpz_init_set_ui(coef[0],0);
27 mpz_init_set(denom,d);
29 for (
int i=0;
i<=
n;
i++)
31 mpz_init_set(coef[
i], a[i]);
50 mpz_init_set_ui(denom,1);
55 mpz_init_set(d,denom);
57 while (mpz_cmp_ui(d,1)!=0 && i<=deg)
62 if (mpz_sgn(denom)==-1)
66 if (mpz_cmp_ui(d,1)!=0)
68 mpz_div(denom,denom,d);
69 for (
int j=0;
j<=deg;
j++)
71 mpz_div(coef[
j],coef[j],d);
78 while(mpz_sgn(coef[j])==0 && j>=0)
85 mpz_mul(denom,denom,b);
86 for (
int i=0;
i<=deg;
i++)
88 mpz_mul(coef[
i],coef[i],b);
105 mpz_init_set_ui(atemp,0);
106 mpz_init_set_ui(btemp,0);
108 for (
int i=0;
i<=b.
deg;
i++)
112 mpz_add(coef[
i],atemp,btemp);
123 while(mpz_sgn(coef[i])==0 && i>=0)
127 else {Q_poly_add(b,a);}
135 this->Q_poly_add(*
this,g);
143 Q_poly_set(a,f.
denom);
149 mpz_mul(atemp,a,f.
denom);
150 mpz_add(coef[0],coef[0],atemp);
152 if (deg==0 && mpz_sgn(coef[0])==0)
162 this->Q_poly_add_const(*
this,a);
169 if (i<=deg && is_zero()==0)
172 mpz_init_set_ui(atemp,0);
173 mpz_mul(atemp,a,f.
denom);
174 mpz_add(coef[i],coef[i],atemp);
178 if (deg==i && mpz_sgn(coef[i])==0)
181 else if (is_zero()==1)
186 mpz_init_set_ui(coef[
j],0);
188 mpz_init_set(coef[i],a);
189 mpz_init_set_ui(denom,1);
194 for(
int j=i-1;
j>deg;
j--)
196 mpz_init_set_ui(coef[
j],0);
199 mpz_mul(atemp,a,f.
denom);
200 mpz_init_set(coef[i],atemp);
207 this->Q_poly_add_mon(*
this,a,i);
225 this->Q_poly_sub(*
this,b);
240 mpz_init_set_ui(atemp,1);
241 mpz_mul(atemp,a,f.
denom);
242 mpz_sub(coef[0],coef[0],atemp);
251 this->Q_poly_sub_const(*
this,a);
259 mpz_init_set_ui(temp,0);
261 Q_poly_add_mon(f,temp,i);
267 this->Q_poly_sub_mon(*
this,a,i);
277 mpz_init_set(denom,f.
denom);
278 for (
int i=deg;
i>=
n;
i--)
280 mpz_init_set(coef[
i],f.
coef[i-n]);
282 for (
int i=n-1;
i>=0;
i--)
284 mpz_init_set_ui(coef[
i],0);
290 this->Q_poly_mon_mult(*
this,n);
299 mpz_init_set(denom,g.
denom);
302 mpz_init_set_ui(temp,0);
303 for(
int i=0;
i<=deg;
i++)
305 mpz_mul(temp,n,g.
coef[
i]);
306 mpz_init_set(coef[
i],temp);
315 mpz_init_set(denom,g.
denom);
318 mpz_init_set_ui(temp,0);
319 for(
int i=0;
i<=deg;
i++)
321 mpz_mul(temp,n,g.
coef[
i]);
322 mpz_init_set(coef[
i],temp);
329 this->Q_poly_scalar_mult(*
this,n);
338 mpz_neg(denom,denom);
350 mpz_init_set_ui(temp,0);
357 for(
int i=a.
deg+1;
i<=deg;
i++)
359 mpz_init_set_ui(atemp.
coef[
i],0);
361 for(
int i=b.
deg+1;
i<=deg;
i++)
363 mpz_init_set_ui(btemp.
coef[
i],0);
369 for (
int k=0;
k<=deg;
k++)
371 mpz_init_set_ui(coef[
k],0);
372 for (
int i=0;
i<=
k;
i++)
375 mpz_add(coef[k],coef[k],temp);
386 this->Q_poly_mult_n(*
this,g);
397 n =
static_cast<int>(ceil(
log(n)/
log(2)));
398 n =
static_cast<int>(
pow(2,n));
404 Q_poly_set(AB,A.
denom);
445 mpz_mul(denom,g.
denom,n);
452 this->Q_poly_scalar_div(*
this,n);
465 mpz_init_set(denom,f.
denom);
469 mpz_init_set(coef[
i],f.
coef[n+i]);
486 while(mpz_sgn(f.
coef[j])==0 && j>=0)
490 mpz_init_set_ui(coef[j],0);
492 for (
int i=j;
i>=0;
i--)
494 mpz_init_set(coef[
i],f.
coef[i]);
496 mpz_init_set(denom,f.
denom);
511 mpz_init_set_ui(denom,1);
513 mpz_init_set_ui(Bint.
denom,1);
514 int e = A.
deg - B.
deg + 1;
522 Q_poly_scalar_mult_to(B.
coef[B.
deg]);
534 Q_poly_scalar_mult_to(q);
539 Q_poly_scalar_div_to(q);
542 mpz_pow_ui(d,d,A.
deg-B.
deg+1);
543 mpz_mul(denom,denom,d);
546 mpz_mul(denom,denom,A.
denom);
547 Q_poly_scalar_mult_to(B.
denom);
555 this->Q_poly_div_rem(*
this,B);
566 mpz_init_set_ui(R.
denom,1);
569 mpz_init_set_ui(Bint.
denom,1);
570 int e = A.
deg - B.
deg + 1;
603 mpz_pow_ui(d,d,A.
deg-B.
deg+1);
619 this->Q_poly_div(Q,R,*
this,B);
657 mpz_init_set(erg,coef[deg]);
658 for (
int i=deg;
i>=1;
i--)
661 mpz_add(erg,erg,coef[
i-1]);
673 for (
int i=A.
deg;
i>=1;
i--)
676 Q_poly_add_const_to(A.
coef[
i-1]);
692 mpz_init_set(denom,b.
denom);
694 for(
int i=0;
i<=deg;
i++)
696 mpz_init_set(coef[
i],b.
coef[i]);
705 mpz_init_set(denom,d);
706 mpz_init_set(coef[0],b);
713 mpz_init_set_ui(denom,1);
714 mpz_init_set(coef[0],b);
737 for (
int i=deg;
i>=0;
i--)
739 if (mpz_cmp(coef[
i],g.
coef[i])!=0)
762 if (mpz_cmp(coef[0],denom)==0) {
return 1; }
770 if (mpz_cmp(coef[deg],denom)==0)
792 mpz_init_set_ui(App.
denom,1);
793 mpz_init_set_ui(Bpp.
denom,1);
812 Q_poly_extgcd(t,s,g,B,A);
819 mpz_init_set_ui(temp,1);
826 mpz_init_set_ui(temp,1);
850 Q_poly_div(Q,R3,R1,R2);
883 cout <<
"Bitte geben Sie ein Q_polynom ein! Zunächst den Grad: " << endl;
885 mpz_init_set_ui(denom,1);
886 cout <<
"Jetzt den Hauptnenner: " << endl;
887 mpz_inp_str(denom,stdin, 10);
889 for (
int i=0;
i<=deg;
i++)
891 mpz_init_set_ui(coef[
i],0);
892 printf(
"Geben Sie nun f[%i] ein:",i);
893 mpz_inp_str(coef[i],stdin, 10);
904 cout <<
"0" <<
"\n" <<endl;
908 for (
int i=deg;
i>=1;
i--)
910 mpz_out_str(stdout,10,coef[
i]);
913 mpz_out_str(stdout,10,coef[0]);
915 mpz_out_str(stdout,10,denom);
void Q_poly_scalar_mult(const mpz_t, const Q_poly)
const CanonicalForm int s
void Q_poly_mult_ka(const Q_poly, const Q_poly)
void Q_poly_mon_mult_to(const int)
void Q_poly_div_rem(const Q_poly, const Q_poly)
void Q_poly_scalar_div(const Q_poly, const mpz_t)
void Q_poly_multsub_to(const Q_poly, const Q_poly)
void Q_poly_add_mon(const Q_poly, mpz_t, int)
const CanonicalForm CFMap CFMap int &both_non_zero int n
void Q_poly_sub_mon(const Q_poly, mpz_t, int)
void Q_poly_mult_n(Q_poly, Q_poly)
void Q_poly_gcd(Q_poly, Q_poly)
gmp_float log(const gmp_float &a)
void Q_poly_sub(const Q_poly, const Q_poly)
void Q_poly_mult_n_to(const Q_poly)
void Q_poly_add_const_to(const mpz_t)
void Q_poly_sub_mon_to(mpz_t, int)
void Q_poly_add_to(const Q_poly)
void Q_poly_mon_div(const Q_poly, const int)
void Q_poly_scalar_mult_to(const mpz_t)
void Q_poly_horner_Q_poly(Q_poly, const Q_poly)
void Q_poly_div_to(Q_poly &, Q_poly &, const Q_poly)
void Q_poly_extend(mpz_t)
void Q_poly_extgcd(Q_poly &, Q_poly &, Q_poly &, Q_poly, Q_poly)
void Q_poly_horner(mpz_t, const mpz_t)
void Q_poly_add(const Q_poly, const Q_poly)
void Q_poly_add_mon_to(mpz_t, int)
void Q_poly_multadd_to(const Q_poly, const Q_poly)
void Q_poly_div(Q_poly &, Q_poly &, const Q_poly, const Q_poly)
void Q_poly_mon_mult(const Q_poly, const int)
void Q_poly_scalar_div_to(const mpz_t)
void Q_poly_sub_const(Q_poly, const mpz_t)
void Q_poly_set(const Q_poly)
void Q_poly_div_rem_to(const Q_poly)
void Q_poly_sub_const_to(const mpz_t)
void Q_poly_mon_div_rem(const Q_poly, const int)
Rational pow(const Rational &a, int e)
void Q_poly_sub_to(const Q_poly)
void Q_poly_add_const(Q_poly, const mpz_t)