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