Пример #1
0
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;
}
Пример #2
0
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);
}