
/* P = array of low primes;  H = *P = a prime from that array */
int GetPrimeFactors(int *P, int *PF, int *EF, int N)
{
 int H,J,K,EXP,NumFactors;            

  K=N;  NumFactors=0;
LP:
  H=*P;       /* H>0 */       /* Get factor H from array of lower primes */
  J=K%H;  EXP=0;
  while ((!J) && (K)) {EXP++; K=K/H; J=K%H;}     /* Get exponents >0 for H */
  if (EXP) {*PF=H; PF++; *EF=EXP; EF++; NumFactors++;}
  P++;      /*   printf("EXP=%d\n",EXP); */
  if ((K)  && (*P)) goto LP;   /* more prime factors > H */
                        /*  printf("K=%d *P=%d\n",K,*P); */
 H=*P;
 if ((!H) && (K>1)) {*PF=K; PF++; *EF=1; EF++; NumFactors++;}
    /* K is the last and largest factor, and is a prime because none of the
         lower primes are factors */

 *PF=*EF=0;    /* end of data markers */
 return NumFactors;
}

