15/03/2007, 14:53
|
| | Fecha de Ingreso: marzo-2007
Mensajes: 2
Antigüedad: 17 años, 9 meses Puntos: 0 | |
Re: ayuda por favor He intentado dividir los polinomios en 2, llamar recursivamente para multiplicar esas dos partes, y despues sumarlas y volver a llamar recursivamente para multiplicar el resultado. Es el mismo metodo que se usa para multiplicar enteros largos usando divide y venceras.
Aqui les dejo el codigo:
int* MultiPoli(int* p, int n, int* q, int m){
int* P;
int* Y;
int* Pi;
int* Pd;
int* Qi;
int* Qd;
int* U;
int* Z;
int* Sp;
int* Sq;
int* f;
int* j;
int x=0;
int y=0;
int i,N,M;
if (m==1)
return (int *)(p[0]*q[0]);
else {
for(i=0;i<=((n/2)-1);i++){ //Parte IzquieZa de P
Pi[i]=p[i];
}
for(i=n/2;i<n;i++){ //Parte Derecha de P
Pd[i]=p[i];
}
for(i=0;i<=((m/2)-1);i++){ //Parte IzquieZa de Q
Qi[i]=q[i];
}
for(i=m/2;i<m;i++){ //Parte Derecha de Q
Qd[i]=q[i];
}
U=MultiPoli(Pi,n/2,Qi,m/2); //Llamada recursiva
Z=MultiPoli(Pd,n/2,Qd,m/2); //Llamada recursiva
for(i=0;i<=((n/2)-1);i++){ // Pi+Pd
Sp[i]=Pi[i]+Pd[i];
}
for(i=0;i<=((m/2)-1);i++){ // Qi+Qd
Sq[i]=Qi[i]+Qd[i];
}
Y=MultiPoli(Sp,n/2,Sq,m/2); //Llamada recursiva
for (i=0;i<=((n/2)-1);i++){ // Y-U-Z
f[i]=Y[i]-U[i]-Z[i];
}
for(i=0;i<2*n;i++){ // Calculo la solucion
j[i]=U[i]+f[i]+Z[i];
}
return j;
}//Fin else
}//Fin metodo
Gracias. |