/*****************************************************************************/
/* */
/* COMPUTE (A**P+B**P)/(A+B) (UNSIGNED) */
/* 11/13/06 (dkc) */
/* */
/*****************************************************************************/
void bigprod(unsigned int a0, unsigned int a1, unsigned int multiplier,
unsigned int *product);
void bigbigq(unsigned int a0, unsigned int a1, unsigned int a2, unsigned int a3,
unsigned int *quotient, unsigned int d0, unsigned int d1);
void bigbigs(unsigned int *a, unsigned int *b);
void depower(unsigned int d, unsigned int e, unsigned int p, unsigned int *S) {
unsigned int i,temp;
unsigned int X[3],Y[4],Z[4];
Y[0] = 0;
Y[1] = 0;
Y[2] = 0;
Y[3] = d;
for (i=0; i<p-1; i++) {
bigprod(Y[2], Y[3], d, X);
Y[1]=X[0];
Y[2]=X[1];
Y[3]=X[2];
}
Z[0] = 0;
Z[1] = 0;
Z[2] = 0;
Z[3] = e;
for (i=0; i<p-1; i++) {
bigprod(Z[2], Z[3], e, X);
Z[1]=X[0];
Z[2]=X[1];
Z[3]=X[2];
}
bigbigs(Y, Z);
temp=d+e;
if (((d+e)/p)*p==(d+e))
temp=temp*p;
bigbigq(Z[0], Z[1], Z[2], Z[3], Y, 0, temp);
S[0]=Y[2];
S[1]=Y[3];
return;
}