bool iterar(Polynom *anterior) { bigint primero = 0; bigint resp = anterior->eval(primero); if((resp % D) != 0) { return false; } if(anterior->grado == 0) { return true; } Polynom *siguiente = new Polynom(0, 101); siguiente->clear(); for(int i = 1; i <= anterior->grado; i++) { if(anterior->coef[i] != 0) { Polynom nuevo(0, 101); Polynom temp(0, 101); temp.coef[0] = anterior->coef[i]; nuevo.copyFrom(&nMasUno[i]); nuevo *= &temp; (*siguiente) += &nuevo; } } siguiente->coef[0] += anterior->coef[0]; (*siguiente) -= anterior; siguiente->simplify(); bool respuesta = iterar(siguiente); delete siguiente; return respuesta; }
void mcd(Polynom* na, Polynom* nb, Polynom *res) { Polynom a(0,20); Polynom b(0,20); a.copyFrom(na); b.copyFrom(nb); Polynom *t = new Polynom(0,a.max); Polynom *residuo = new Polynom(0,a.max); while (! b.isZero() ) { a.div(&b,t,residuo); a.copyFrom(&b); b.copyFrom(residuo); t->clear(); } delete t; delete residuo; res->copyFrom(&a); }