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; }
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; }