Exemplo n.º 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;
}
Exemplo n.º 2
0
Polynom *leer() {
    char entrada[10000];
    int actual = 0;
    fgets(entrada, 10000, stdin);
    if(entrada[0] == '.')
        return NULL;
    actual = 1;
    Polynom *nuevo = new Polynom(101, 105);
    while(true) {
        if(entrada[actual] == ')')
            break;
        int a;
        if(entrada[actual] == 'n') {
            a = 1;
        }
        else if((entrada[actual] == '-' || entrada[actual] == '+') && entrada[actual + 1] == 'n') {
            a = entrada[actual] == '-' ? -1 : 1;
            actual++;
        }
        else {
            sscanf(entrada + actual, "%d", &a);
            for(int i = actual; i < 10000; i++) {
                if((entrada[i] > '9' || entrada[i] < '0') && entrada[i] != '+' && entrada[i] != '-')
                {
                    actual = i;
                    break;
                }
            }
        }
        if(entrada[actual] == 'n')
            actual++;
        else {
            nuevo->coef[0] += a;
            break;
        }
        int exp;
        if(entrada[actual] == '^')
        {
            actual++;
            sscanf(entrada + actual, "%d", &exp);
            for(int i = actual; i < 10000; i++) {
                if(entrada[i] > '9' || entrada[i] < '0')
                {
                    actual = i;
                    break;
                }
            }
        }
        else {
            exp = 1;
        }
        nuevo->coef[exp] += a;
    }
    nuevo->simplify();
    actual += 2;
    sscanf(entrada + actual, "%d", &D);
    return nuevo;
}