www.pudn.com > calc.rar > fun.h


#ifndef __FUN_H__ 
#define __FUN_H__ 
 
#define dprintd(expr) printf(#expr " = %d\n", expr); fflush(stdout) 
#define dprintld(expr) printf(#expr " = %ld\n", expr); fflush(stdou)t 
#define dprintg(expr) printf(#expr " = %g\n", expr); fflush(stdout) 
#define dprints(expr) printf(#expr " = %s\n", expr); fflush(stdout) 
#define dprintc(expr) printf(#expr " = %c\n", expr); fflush(stdout) 
#define dprintu(expr) printf(#expr " = %u\n", expr); fflush(stdout) 
#define dprintlu(expr) printf(#expr " = %lu\n", expr); fflush(stdout) 
 
#define DPRINTPI(expr) printf(#expr " = "); PRINTPI(expr); printf("\n");\ 
 fflush(stdout) 
#define DPRINTI(expr) printf(#expr " = "); PRINTI(expr); printf("\n"); \ 
fflush(stdout) 
#define DPRINTR(expr) printf(#expr " = "); PRINTR(expr); printf("\n"); \ 
fflush(stdout) 
 
 
 
#include "pI.h" 
#include "roots.h" 
#include "wrappers.h" 
extern long nettbytes; 
int isatty(int fd); 
FILE *Fopen_r(char *filename); 
MPI *ZSUB2IPLUS1(MPI *X, MPI *R, MPI *S, MPI *U, MPI *V, MPI *N); 
MPI *XSUB2IPLUS1(MPI *X, MPI *Z, MPI *R, MPI *S, MPI *U, MPI *V, MPI *P, MPI *Q, MPI *N); 
MPI *ZSUB2I(MPI *R, MPI *S, MPI *P, MPI *Q, MPI *N); 
MPI *XSUB2I(MPI *R, MPI *S, MPI *P, MPI *Q, MPI *N); 
MPI *FIBONACCI(USI n); 
MPI *FUND_UNIT(MPI *D, MPI **Xptr, MPI **Yptr); 
MPI *FUND_UNITX(MPI *D, MPI **Xptr, MPI **Yptr); 
MPI *PEL(MPI *D, MPI *E, MPI **Xptr, MPI **Yptr); 
MPI *PELX(MPI *D, MPI *E, MPI **Xptr, MPI **Yptr); 
MPI *JUGGLERT(MPI *Dptr); 
MPI **SMITHI(MPMATI *Mptr, MPMATI **Pptr, MPMATI **Qptr, USI *ptr, MPI *Eptr, USI m1, USI n1); 
MPI **SMITHI1(MPMATI *Mptr, USI *ptr, MPI *Eptr, USI m1, USI n1); 
MPI *ABSI(MPI *Aptr); 
MPI *ADD0I(MPI *Aptr, MPI *Bptr); 
MPI *ADD0_I(MPI *Aptr, unsigned long b); 
MPI *ADDI(MPI *Aptr, MPI *Bptr); 
MPI *ADDM(MPI *Aptr, MPI *Bptr, MPI *Mptr); 
MPI *APPROXN(MPI *Aptr, unsigned int m); 
MPI *BABY_DIVIDE(MPI *Nptr); 
MPI *BABY_MTHROOT(MPI *Aptr, unsigned int m); 
MPI *BANK_REALLOC(MPI *Aptr, unsigned int degree); 
MPI *BIG_FACTOR(MPI *Nptr); 
MPI *BIG_MTHROOT(MPI *Aptr, unsigned int m); 
MPI *BIG_MTHROOTX(MPI *Aptr, MPI *M); 
MPI *BINOMIAL(USI n, USI m); 
MPI *BRENT_POLLARD(MPI *Nptr); 
MPI *BUILDMPI(unsigned int n); 
MPI *CHANGE(unsigned long n); 
MPI *CHANGEI(long n); 
MPI *CHINESE(MPI *A, MPI *B, MPI *M, MPI *N, MPI **Mptr); 
MPI *CHINESEX(MPI *A, MPI *B, MPI *M, MPI *N, MPI **Mptr); 
MPI *CHINESE_ARRAY(MPI *A[], MPI *M[], MPI **Mptr, USI n); 
MPI *CHINESE_ARRAYX(MPIA A, MPIA M, MPI **Mptr); 
MPI *COLLATZT(MPI *Dptr); 
MPI *COLSUMI(MPMATI *Mptr, USI j); 
MPI *CONGR(MPI *A, MPI *B, MPI *M, MPI **N); 
MPI *CONGRX(MPI *A, MPI *B, MPI *M, MPI **N); 
MPI *COPYI(MPI *Aptr); 
MPI *CRA(USL n, USL *a, USL *m); 
MPI *DIVISOR(MPI *N); 
MPI *DIVISORX(MPI *N); 
MPI *DIVM(MPI *Aptr, MPI *Bptr, MPI *Mptr); 
MPI *DOTRI(MPMATI *Mptr, USI i, USI j); 
MPI *EUCLIDI(MPI *Pptr, MPI *Qptr, MPI **Hptr, MPI **Kptr); 
MPI *EULER(MPI *N); 
MPI *EULERX(MPI *N); 
MPI *FACTORQ(); 
MPI *FACTORQ1(MPI *Q, USI factored, USL base[], USL **M1, USI FBASE, long x, USL r1[], USL r2[], USL r, int INDEX[], USI CTR[]); 
MPI *FACTORX(MPI *N); 
MPI *FFM(MPI *a, MPI *b, USL K); 
MPI *FINPUTI(FILE *f, unsigned int *uptr); 
MPI *GCD(MPI *Aptr, MPI *Bptr); 
MPI *GCD_ARRAY(MPIA M); 
MPI *GCD_ARRAYV(MPIA M, MPIA *Y); 
MPI *GCD_ARRAYVX(MPIA M, MPIA *Y); 
MPI *INPUTI(unsigned int *uptr); 
MPI *INPUTSI(char **ptr, unsigned int *uptr); 
MPI *INPUTSID(char **ptr, unsigned int *uptr); 
MPI *INT(MPI *Aptr, MPI *Bptr); 
MPI *INT0(MPI *Aptr, MPI *Bptr); 
MPI *INT0_(MPI *Aptr, unsigned long b); 
MPI *INTI(MPI *Aptr, MPI *Bptr); 
MPI *INT_(MPI *Aptr, unsigned long b); 
MPI *INVERSEM(MPI *Nptr, MPI *Mptr); 
MPI *INVERSEMX(MPI *A, MPI *M); 
MPI *JACOB(MPI *M, MPI *N); 
MPI *LCM(MPI *Aptr, MPI *Bptr); 
MPI *LCM_ARRAY(MPIA M); 
MPI *LENGTHX(MPI *N); 
MPI *LENGTHSQCI(MPMATI *Mptr, USI i); 
MPI *LENGTHSQRI(MPMATI *Mptr, USI j); 
MPI *LPRIMROOT(MPI *P); 
MPI *LPRIMROOTX(MPI *P); 
MPI *LUCAS(MPI *N); 
MPI *LUCASB(MPI *N); 
MPI *LUCASS(USI n); 
MPI *LUCASBX(MPI *N); 
MPI *LUCASU(MPI *N, MPI *Q, MPI *M); 
MPI *LUCASUX(MPI *N, MPI *Q, MPI *M); 
MPI *LUCASX(MPI *N); 
MPI *MAXELTI(MPMATI *Mptr); 
MPI *MINELTI(MPMATI *Mptr); 
MPI *MINUSI(MPI *Aptr); 
MPI *MINUSM(MPI *Aptr, MPI *Mptr); 
MPI *MINUS_ONEI(); 
MPI *MOBIUS(MPI *N); 
MPI *MOBIUSX(MPI *N); 
MPI *MOD(MPI *Aptr, MPI *Bptr); 
MPI *MOD0(MPI *Aptr, MPI *Bptr); 
MPI *MPOWER(MPI *Aptr, MPI *Bptr, MPI *Cptr); 
MPI *MPOWERX(MPI *Aptr, MPI *Bptr, MPI *Cptr); 
MPI *MPOWER_(long a, MPI *Bptr, MPI *Cptr); 
MPI *MPOWER_M(MPI *Aptr, USL b, MPI *Cptr); 
MPI *MPQS1(MPI *N); 
MPI *MULT32X(MPI *X, MPI *Y); 
MPI *MULTABC(MPI *A, MPI *B, MPI *C); 
MPI *MULTI(MPI *Aptr, MPI *Bptr); 
MPI *MULTI3(MPI *A, MPI *B, MPI *C); 
MPI *MULTM(MPI *Aptr, MPI *Bptr, MPI *Mptr); 
MPI *MULT_I(MPI *Aptr, long b); 
MPI *MULT_II(MPI *Aptr, USL b); 
MPI *NEAREST_INTI(MPI *Aptr, MPI *Bptr); 
MPI *NEAREST_INTR(MPR *Aptr); 
MPI *NEWTON(MPI *Aptr, unsigned int m, MPI *Fptr); 
MPI *NEXT_PRIME(MPI *M, USI *hptr); 
MPI *NEXT_PRIMEX(MPI *M); 
MPI *NEXTPRIMEAP(MPI *A, MPI *B, MPI *M); 
MPI *NEXTPRIMEAPX(MPI *A, MPI *B, MPI *M); 
MPI *Nextprime(MPI *N); 
MPI *ONEI(); 
MPI *ORDERM(MPI *A, MPI *M); 
MPI *ORDERMX(MPI *A, MPI *M); 
MPI *ORDERP(MPI *A, MPI *P); 
MPI *ORDERPX(MPI *A, MPI *P); 
MPI *ORDERQ(MPI *A, MPI *P, unsigned int n); 
MPI *ORDERQX(MPI *A, MPI *P, MPI *N); 
MPI *PI(unsigned int r); 
MPI *PINCH_PRIME(MPI *M, MPI *N, long *base, USI FBASE, USI *hptr); 
MPI *POLLARD(MPI *Nptr); 
MPI *POWERI(MPI *Aptr, unsigned n); 
MPI *POWER_I(long a, unsigned n); 
MPI *PROB_PRIME(MPI *M, MPI *N, USI *hptr); 
void Parse(); 
MPI *ROWSUMI(MPMATI *Mptr, USI i); 
MPI *RSAE(MPI *Pptr, MPI *Qptr); 
MPI *RSAEX(MPI *Pptr, MPI *Qptr); 
MPI *SHIFTLB(MPI *U); 
MPI *SIGMA(MPI *N); 
MPI *SIGMAX(MPI *N); 
MPI *SQRTM(MPI *x, MPI *p); 
MPI *SQRTMX(MPI *x, MPI *p); 
MPI *SUB0I(MPI *Aptr, MPI *Bptr); 
MPI *SUB0_I(MPI *Aptr, unsigned long b); 
MPI *SUBI(MPI *Aptr, MPI *Bptr); 
MPI *SUBM(MPI *Aptr, MPI *Bptr, MPI *Mptr); 
MPI *TWOI(); 
MPI *UPDATEMAXI(MPI *S, MPMATI *Mptr); 
MPI *ZEROI(); 
MPMATI *ADDMATI(MPMATI *Mptr, MPMATI *Nptr); 
MPMATI *ADD_MULT_ROWI(USI p, USI q, MPI *Aptr, MPMATI *Mptr); 
MPMATI *BASIS_REDUCTION(MPMATI *Bptr, MPMATI **Eptr, USI rowstage, USI m1, USI n1); 
MPMATI *BASIS_REDUCTION0(MPMATI *Bptr, USI m1, USI n1); 
MPMATI *BASIS_REDUCTION00(MPMATI *Bptr, USI m1, USI n1, USI norig); 
MPMATI *BUILDMATI(unsigned int m, unsigned int n); 
MPMATI *COLSUBI(USI p, USI q, MPI *Aptr, MPMATI *Mptr); 
MPMATI *COLSUBI0(USI p, USI q, MPI *Aptr, MPMATI *Mptr); 
MPMATI *COPYMATI(MPMATI *Mptr); 
MPMATI *DELETE_COL1I(MPMATI *Mptr); 
MPMATI *DELETE_ROW1I(MPMATI *Mptr); 
MPMATI *DELETE_ROWI(USI r, MPMATI *Mptr); 
MPMATI *EXTGCD(MPMATI *Dptr, MPI **Aptr, MPMATI **Q, USI m1, USI n1); 
MPMATI *FINPUTMATFILEI_I(); 
MPMATI *FINPUTMATI(FILE *infile); 
MPMATI *HERMITE1(MPMATI *Aptr, USI *T, USI nz); 
MPMATI *HERMITE1P(MPMATI *Aptr, MPMATI *Pptr, MPMATI **Qptr, USI *T, USI nz); 
MPMATI *IDENTITYI(USI n); 
MPMATI *INPUTMATI(); 
MPMATI *MULTMATI(MPMATI *Mptr, MPMATI *Nptr); 
MPMATI *ROWSUBI(USI p, USI q, MPI *Aptr, MPMATI *Mptr); 
MPMATI *ROWSUBI0(USI p, USI q, MPI *Aptr, MPMATI *Mptr); 
MPMATI *SUBMATI(MPMATI *Mptr, MPMATI *Nptr); 
MPMATI *SWAP_COLSI(USI p, USI q, MPMATI *Mptr); 
MPMATI *SWAP_COLSI1(USI p, USI q, MPMATI *Mptr); 
MPMATI *SWAP_ROWSI(USI p, USI q, MPMATI *Mptr); 
MPMATI *SWAP_ROWSI1(USI p, USI q, MPMATI *Mptr); 
MPMATI *ZEROMNI(USI m, USI n); 
MPMATR *BUILDMATR(USI m, USI n); 
MPMATR *CHOLESKYR(MPMATR *A); 
MPMATR *COPYMATR(MPMATR *Mptr); 
MPMATR *ZEROMNR(USI m, USI n); 
MPR *ADDR(MPR *Aptr, MPR *Bptr); 
MPR *BUILDMPR( ); 
MPR *COPYR(MPR *Aptr); 
MPR *FINPUTR(FILE *f, unsigned int *uptr); 
MPR *FRAC_PARTI(MPI *Aptr, MPI *Bptr); 
MPR *FRAC_PARTR(MPR *Aptr); 
MPR *INPUTR(unsigned int *uptr); 
MPR *INPUTSR(char **ptr, unsigned int *uptr); 
MPR *INPUTSRD(char **ptr); 
MPR *INTR(MPR *Aptr); 
MPR *INTROOT(MPR *Z, MPR *U); 
MPR *INVERSER(MPR *Aptr); 
MPR *MINUSR(MPR *Aptr); 
MPR *MINUS_ONER(); 
MPR *MTHROOTR(MPR *Nptr, unsigned int m, unsigned int r); 
MPR *MULTABCR(MPR *A, MPR *B, MPR *C); 
MPR *MULTR(MPR *Aptr, MPR *Bptr); 
MPR *ONER(); 
MPR *TWOR(); 
MPR *PII(unsigned int r); 
MPR *POWERR(MPR *Aptr, unsigned int n); 
MPR *POWERR_2(MPR *R, int n); 
MPR *RATIOI(MPI *Aptr, MPI *Bptr); 
MPR *RATIOR(MPR *Aptr, MPR *Bptr); 
MPR *RECIPROCAL(unsigned long n); 
MPR *SUBR(MPR *Aptr, MPR *Bptr); 
MPR *ZEROR(); 
char *Fgets(FILE *f); 
char *Gets(); 
int COMPAREI(MPI *Aptr, MPI *Bptr); 
int COMPARER(MPR *Aptr, MPR *Bptr); 
int QSORTCOMPAREI(const void *Aptr, const void *Bptr); 
int QSORTRSV(const void *Aptr, const void *Bptr); 
int GetCharFlush(); 
int JACOBI(USL n, USL m); 
int JACOBIB(MPI *N, MPI *M); 
int MAX(int i, int j); 
int MIN(int i, int j); 
int RSV(MPI *Aptr, MPI *Bptr); 
int execerror(char *s, char *t); 
int scanf01(USI *jptr); 
int scanf011(USI *jptr, USI *kptr); 
int scanf0112(USI *jptr, USI *kptr, USI *lptr, USI *mptr); 
int scanf012(USI *jptr, USI *kptr, USI *lptr); 
int scanf0122(USI *jptr, USI *kptr, USI *lptr, USI *mptr, USI *nptr); 
int scanf01221(USI *jptr, USI *kptr, USI *lptr, USI *mptr, USI *nptr, USI *optr); 
int scanf02(USI *jptr, USI *kptr); 
int scanf021(USI *jptr, USI *kptr, USI *mptr); 
int scanf03(USI *jptr, USI *kptr, USI *lptr); 
int scanf031(USI *jptr, USI *kptr, USI *lptr, USI *mptr); 
int scanf05(USI *iptr, USI *jptr, USI *kptr, USI *lptr, USI *mptr); 
int scanf051(USI *iptr, USI *jptr, USI *kptr, USI *lptr, USI *mptr, USI *nptr); 
int scanf10(USI *jptr); 
int scanf11(USI *jptr, USI *kptr); 
int scanf12(USI *jptr, USI *kptr, USI *lptr); 
int scanf121(USI *hptr, USI *jptr, USI *kptr, USI *mptr); 
int scanf13(USI *iptr, USI *jptr, USI *kptr, USI *lptr); 
int scanf131(USI *iptr, USI *jptr, USI *kptr, USI *lptr, USI *mptr); 
int scanf20(USI *iptr, USI *jptr); 
int scanf21(USI *jptr, USI *kptr, USI *mptr); 
int scanf22(USI *iptr, USI *jptr, USI *kptr, USI *lptr); 
int scanf221(USI *hptr, USI *iptr, USI *jptr, USI *kptr, USI *mptr); 
int scanf23(USI *iptr, USI *jptr, USI *kptr, USI *lptr, USI *mptr); 
int scanf231(USI *iptr, USI *jptr, USI *kptr, USI *lptr, USI *mptr, USI *nptr); 
int scanf30(USI *iptr, USI *jptr, USI *kptr); 
int scanf321(USI *gptr, USI *hptr, USI *iptr, USI *jptr, USI *kptr, USI *mptr); 
int scanf40(USI *iptr, USI *jptr, USI *kptr, USI *lptr); 
int scanfd10(int *jptr); 
int whitespace(FILE *f); 
unsigned int *KB_ROW(MPMATI *Aptr, USI *nz); 
unsigned int *KB_ROWP(MPMATI *Aptr, MPMATI **Pptr, USI *nz); 
unsigned int BINARY(USL i); 
unsigned int BINARYB(MPI *N); 
unsigned int COLSEEKI(USI i, MPMATI *Mptr); 
unsigned int EQMINUSONECI(); 
unsigned int EQMINUSONECR(); 
unsigned int EQMINUSONEI(); 
unsigned int EQMINUSONER(); 
unsigned int EQONECI(); 
unsigned int EQONECR(); 
unsigned int EQONEI(MPI *Mptr); 
unsigned int EQONER(); 
unsigned int EQUALI (MPI *Aptr, MPI *Bptr); 
unsigned int EQUALR(MPR *Aptr, MPR *Bptr); 
unsigned int EQZEROCI(); 
unsigned int EQZEROCR(); 
unsigned int EQZEROI(MPI *Mptr); 
unsigned int EQZEROR(); 
unsigned int FACTOR(MPI *Nptr); 
unsigned int GetYN(); 
unsigned int HAVAS_PIVOTI(MPMATI *Mptr, USI *rptr, USI *cptr, USI r, USI s); 
unsigned int LENGTHm(USL n); 
unsigned int MATSEEKI(USI i, MPMATI *Mptr); 
unsigned int MILLER(MPI *Nptr, USL b); 
unsigned int ORDERECP(MPI *X, MPI *Z, MPI *P, MPI *Q, MPI *N); 
unsigned int PRIME_FACTORS(MPI *Nptr); 
unsigned int Q_PRIME_TEST(MPI *Nptr); 
unsigned int REDUCED(MPI *D, MPI *U, MPI *V, USI i); 
unsigned int ROWSEEKI(USI i, MPMATI *Mptr); 
unsigned int SELFRIDGE(MPI *Nptr, USI *uptr); 
unsigned int STEP4(USI k, USI l, MPMATI **Lptr, MPMATI **Bptr, MPMATI **Eptr, MPI *D[], USI i); 
unsigned int STEP40(USI k, USI l, MPMATI **Lptr, MPMATI **Bptr, MPI *D[]); 
unsigned int STEP400(USI k, USI l, MPMATI **Lptr, MPMATI **Bptr, MPI *D[],USI gcdflag,USI norig); 
unsigned int binary(USL i); 
unsigned long **idim2(USI row, USI col); 
unsigned long *ERATOSTHENES(USI n); 
unsigned long *FFI(USL N, USL *b, USL w, USL p); 
unsigned long *FFP(USL N, USL *a, USL *b, USL m, USL n, USL w, USL p); 
unsigned long *FFT(USL N, USL *a, USL w, USL p); 
unsigned long ADDm(USL a, USL b, USL m); 
unsigned long ADDm(USL a, USL b, USL m); 
unsigned long CONVERTI(MPI *N); 
unsigned long DIVm(USL a, USL b, USL m); 
unsigned long GCDm(USL m, USL n); 
unsigned long INVERSEm(USL n, USL m); 
unsigned long INVERSEm(USL n, USL m); 
unsigned long INVERSEm(USL n, USL m); 
unsigned long LENGTHDR(unsigned int d, MPR *Mptr); 
unsigned long LENGTHI(MPI *Mptr); 
unsigned long LENGTHR(MPR *Mptr); 
unsigned long MINUSm(USL a, USL m); 
unsigned long MINUSm(USL a, USL m); 
unsigned long MOD0_(MPI *Aptr, unsigned long b); 
unsigned long MODINT0_(MPI *Aptr, unsigned long b, MPI **Qptr); 
unsigned long MOD_(MPI *Aptr, unsigned long b); 
unsigned long MULT32(USL x, USL y); 
unsigned long MULTm(USL a, USL b, USL m); 
unsigned long MULTm(USL a, USL b, USL m); 
unsigned long POWER_m(USL a, USL y, USL m); 
unsigned long POWERm(USL a, MPI *Bptr, USL m); 
unsigned long RANDOMm(USL x); 
unsigned long RUSSm(USL a, USL b, USL c, USL p); 
unsigned long RUSSm(USL a, USL b, USL c, USL p); 
unsigned long RUSSm(USL a, USL b, USL c, USL p); 
unsigned long SQRTm(USL x, USL p); 
unsigned long SUBm(USL a, USL b, USL m); 
unsigned long SUBm(USL a, USL b, USL m); 
void *calloc1(size_t m, size_t n); 
void *malloc1(size_t nbytes); 
void *realloc1(void *ptr, size_t nbytes, long mbytes); 
void ADD_CUBICR(MPR *X1, MPR *Y1, MPR *X2, MPR *Y2, MPR **Xptr, MPR **Yptr, MPR *A1, MPR *A2, MPR *A3, MPR *A4, MPR *A6); 
void ADD_CUBICRX(); 
void *ADD_MULT_ROWI0(USI p, USI q, MPI *Aptr, MPMATI *Mptr); 
void BASIS_UPDATE(USI i, USI m, MPMATI **Cptr, MPMATI **Lptr, MPMATI *B1ptr, MPI *D[]); 
void COLLATZ(MPI *Dptr, MPI *Eptr); 
void CONT_FRAC(MPI *Aptr, MPI *Bptr, MPI *Zptr, MPI **Xptr, MPI **Yptr); 
void CSWAP_UPDATE(USI k, USI m, MPI *S, MPMATI **Cptr, MPI *D[]); 
void DECODE(MPI *Dptr, MPI *Rptr); 
void DECODEX(MPI *Eptr, MPI *Pptr, MPI *Qptr); 
void DUMPMPI(MPI *Mptr, char *name); 
void EXZPOWER(MPI *X, MPI *Z, USI k, MPI *P, MPI *Q, MPI **Aptr, MPI **Cptr, MPI *N); 
void ADD_ELLIPTIC_Q(MPR *X1, MPR *Y1, MPR *X2, MPR *Y2, MPR **Xptr, MPR **Yptr, MPR *A, MPR *B); 
void ENCODE(MPI *Eptr, MPI *Rptr); 
void EXP_UPDATE(MPI *Q, USL base[], USI FBASE, USI exponents[]); 
void EXTGCDX(); 
void FFlush(FILE *f); 
void FIB_MIN(); 
void FINCKE_POHSTX(); 
void FREEMATR(MPMATR *Mptr); 
void FINCKE_POHST(MPMATR *Q, MPR *C, USI filename); 
void FIND(unsigned int k, MPI *A1ptr, MPI *B1ptr, unsigned long R[]); 
void FPRINTDR(FILE *outfile, unsigned int d, MPR *Mptr); 
void FPRINTI(FILE *outfile, MPI *Mptr); 
void FPRINTMATI(FILE *outfile, USI i1, USI i2, USI j1, USI j2, MPMATI *Mptr); 
void FPRINTMATR(FILE *outfile, USI i1, USI i2, USI j1, USI j2, MPMATR *Mptr); 
void FPRINTR(FILE *outfile, MPR *Aptr); 
void FREEMATI(MPMATI *Mptr); 
void FREEMPI(MPI *Mptr); 
void FREEMPIBANK(); 
void FREEMPR(MPR *Mptr); 
void Flush(); 
void GetReturn(); 
void HERMITE(); 
void IMPROVEPX(); 
void INITMPIBANK(); 
void INTSETI(int *Aptr, unsigned long n, int m); 
void INTSETL(long *Aptr, unsigned long n, long m); 
void INTSETUI(unsigned int *Aptr, unsigned long n, unsigned int m); 
void INTSETUL(unsigned long *Aptr, unsigned long n, unsigned long m); 
void JUGGLER(MPI *Dptr, MPI *Iptr); 
void LUCAS_MIN(); 
void MAXELTI1(MPMATI *Mptr, USI *iptr, USI *jptr); 
void MILLERX(MPI *N, MPI *B); 
void MINELTI1(MPMATI *Mptr, USI *iptr, USI *jptr); 
void MLLL(); 
void MTHROOT(MPI *Aptr, MPI *Bptr, unsigned int m, unsigned int r); 
void MTHROOTX(MPI *Aptr, MPI *Bptr, MPI *M, MPI *R); 
MPR *MULTR3(MPR *A, MPR *B, MPR *C); 
void MULTXM(MPI *a, MPI *b, MPI *c, MPI *d, MPI **eptr, MPI **fptr, MPI *x, MPI *p); 
void MULTXm(USL a, USL b, USL c, USL d, USL *eptr, USL *fptr, USL x, USL p); 
void NEXT(int k, MPI *A1ptr, MPI *B1ptr, unsigned long R[]); 
void PELL(MPI *Dptr, MPI *Eptr); 
void POWER_CUBICRX(); 
void POWER_CUBICR(MPR *X1, MPR *Y1, MPR **Xptr, MPR **Yptr, MPR *A1, MPR *A2, MPR *A3, MPR *A4, MPR *A6, unsigned int n); 
void POWERXM(MPI *a, MPI *b, MPI *n, MPI **eptr, MPI **fptr, MPI *x, MPI *p); 
void POWERXm(USL a, USL b, USL n, USL *eptr, USL *fptr, USL x, USL p); 
void PRINT_DEFECT(); 
void PRINTDR(unsigned int d, MPR *Mptr); 
void PRINTI(MPI *Mptr); 
void PRINTIA(MPIA Mptr); 
void PRINTMATI(USI i1, USI i2, USI j1, USI j2, MPMATI *Mptr); 
void PRINTMATR(USI i1, USI i2, USI j1, USI j2, MPMATR *Mptr); 
void PRINTR(MPR *Aptr); 
void PRINTW1(USI n, USI r); 
void PRINTW2(USI n, USI r, USI m); 
void PRINTWW(); 
void QERATOSTHENES(MPI *N, USL base[], USL soln[], USI FBASE); 
void QSORTMPI0(MPI *A[], USI m, USI n); 
void QSORTMPI(MPI *A[], USI m, USI n); 
void QSORTMPIX(); 
void QSORTMATIX(); 
void QSORTMATI(MPMATI *Mptr, USI r, USI s); 
void REDUCTION(USI **M1, USI **M2, USI m, USI n, int SCAN[]); 
void REDUCTION1(USL **M1, USL **M2, USI m, USI n, USI m1bitcols, USI m2bitcols, int INDEX[], USI CTR[]); 
void RODI(MPMATI *Aptr, USI *T, USI j); 
void RODIP(MPMATI *Aptr, MPMATI *Pptr, USI *T, USI j); 
int SIGNI(MPI *I); 
void SCHNORRGCD(MPI *N); 
void SERRET(MPI *P, MPI **Xptr, MPI **Yptr); 
void SHALLIT(); 
void SHORTESTTTX(); 
void SHORTESTTT(MPMATI *AA, MPI *BOUND); 
void SMITH(); 
void SORTI(USI *T, USI nz); 
void SPRINTDR(char *buffer, unsigned int d, MPR *Mptr); 
void SPRINTI(char *buffer, MPI *Mptr); 
void SPRINTR(char *buffer, MPR *Aptr); 
void STEP7(USI i, USI k, MPMATI **Lptr, MPI *D[]); 
void STEP8(USI k, MPMATI **B1ptr, MPMATI **Lptr, MPMATI **Eptr, USI i); 
void STEP80(USI k, MPMATI **B1ptr, MPMATI **Lptr); 
void SelOpt(); 
void TryAgain(); 
void ZEROTESTI(USI i, MPMATI *Mptr, USI *p, USI *q); 
void clean_symtab(); 
void clearscreen(); 
void doit(FILE *f, char *valstr, MPI *Eptr, MPI *Rptr); 
void fpecatch(); 
void ifree2(USL **pa, USI row, USI col); 
void init(); 
void print_array(USL **M, int rows, int cols); 
void sfree(void *ptr, size_t nbytes, char *errorfile, int errorline); 
void undoit(FILE *f, char *unencstr, MPI *Dptr, MPI *Rptr); 
void warning(char *s, char *t); 
void yyerror(); 
MPMATI *LLLGCD(MPMATI *DD, MPI **Aptr, USI m, USI m1, USI n1); 
void REDUCE(USI k, USI l, MPMATI **Lptr, MPMATI **Bptr, MPI *D[], MPI *A[]); 
void SWAP1(USI i, USI k, MPMATI **Lptr, MPI *D[]); 
void SWAP2(USI k, MPMATI **B1ptr, MPMATI **Lptr, MPI *A[]); 
void LLLGCDX(); 
void JACOBIGCDX(); 
MPMATI *JACOBIGCD(MPMATI *DD, MPI **Aptr, USI m); 
USI COLSEEKI0(MPMATI *A, USI i, USI j); 
void SCHNORRHERMITE(MPI *N); 
MPMATI *BASIS_REDUCTION000(MPMATI *Bptr, USI m1, USI n1, MPI *N); 
unsigned int STEP4000(USI k, USI l, MPMATI **Lptr, MPMATI **Bptr, MPI *D[], MPI *N); 
void STEP8000(USI k, MPMATI **B1ptr, MPMATI **Lptr, MPI *N); 
MPMATI *LLLHERMITE1(MPMATI *DD, MPMATI **Aptr, USI *rank, USI m1, USI n1); 
void REDUCE1(USI k, USI l, MPMATI **Lptr, MPMATI **Bptr, MPI *D[], MPMATI **Aptr, USI *col1, USI *col2); 
void SWAP21(USI k, MPMATI **Bptr, MPMATI **Lptr, MPMATI **Aptr); 
void LLLHERMITE1X(); 
void LLLMINUS(MPMATI **Aptr, MPMATI **Pptr, MPMATI **Lptr, USI j); 
MPMATI *SCALAR_ROWI(USI p, MPI *Aptr, MPMATI *Mptr); 
void GCD4(); 
void GCD5(); 
void GCD6(); 
MPMATI *SHORTESTT0(MPMATI *AA, MPI **XX[]); 
void LLLGCDMINUS(MPMATI **Pptr, MPMATI **Lptr, USI j); 
MPI *PERFECT_POWER(MPI *N); 
void CONVERGENTS(MPIA A, MPIA *P, MPIA *Q); 
void LAGRANGE(POLYI P, MPIA *AA, MPI *M); 
MPI *SUMI(MPI *A[], USL n); 
MPI *EFACTORX(MPI *N, MPI *M, MPI *P); 
void AXB(); 
void AXB1(); 
MPMATI *TRANSPOSEI(MPMATI *Mptr); 
unsigned int PIVOTI(MPMATI *Mptr, USI *rptr, USI *cptr, USI r, USI s); 
MPI *RANDOMI(MPI *X, MPI *P, MPI *T); 
void RANDOM_MATRIX(MPI *M, MPI *N, MPI *X, MPI *P, MPI *T); 
MPMATI *RANDOM_MATRIXA(USI m, USI n, MPI *X, MPI *P, MPI *T); 
MPMATI *RANDOM_MATRIXA3(USI m, USI n, MPI *X, MPI *P, MPI *T); 
MPMATI *JCOLSMATI(MPMATI *Mptr, MPMATI *Nptr); 
void TESTAXB(); 
MPI *HALFMOD(MPI *Aptr, MPI *Pptr); 
MPI *THREEI(); 
MPI *CHANGEL(long n); 
void CHANGELX(MPI *M); 
void FERMAT_QUOTIENT(MPI *N); 
MPMATI *LLLGCD0(MPMATI *DD, MPI **Aptr, USI m, USI m1, USI n1); 
MPR *MPI_TO_MPR(MPI *N); 
void LLLGCD0X(); 
void GCD10(); 
void GCD11(); 
void GCD33(); 
MPI *ABS_NEAREST_INTR(MPR *Aptr); 
MPMATI *LLLGCD0M(MPMATI *DD, MPI **Aptr, USI m, USI m1, USI n1); 
void SHORTEST(MPMATI *AA, MPI *I[], USI filename, USI number); 
MPI *EFACTOR(MPI *N, USI m, USI p); 
void SLVECTORX(); 
MPR *SLVECTOR(MPMATR *A, MPR *C, MPR **VALUE); 
void GCD_CONJ(); 
MPMATI *LLLGCDL(MPMATI *DD, MPI **Aptr, USI m, USI m1, USI n1, MPMATR**LMATRIX); 
MPI ***SHORTESTX(MPMATI *AA, MPI *I[], USI *counter); 
void GCD3(); 
void GCDCONJECTURE4(); 
void GCDCONJECTURE5(); 
void GCDCONJECTURE6(); 
void GCDCONJECTURE7(); 
void GCDCONJECTUREM(); 
void ABS_NEAREST_INTRX(); 
MPI *GEN_COLLATZ(MPI *Aptr, USL d, MPI *m[], MPI *X[]); 
void P_CYCLE(MPI *Aptr, USL d, MPI *m[], MPI *X[], USI c); 
unsigned int IS_CYCLE(MPI *Aptr, USL d, MPI *m[], MPI *X[], MPI *Z[], USI c); 
void CYCLE(USL d, MPI *m[], MPI *X[], USL INFINITY, USL RANGE); 
void CYCLEX(); 
MPI *MULTM3(MPI *A, MPI *B, MPI *C, MPI *M); 
MPI *MULTABCM(MPI *A, MPI *B, MPI *C, MPI *M); 
void POWER_CUBICM(MPI *X1, MPI *Y1, MPI **Xptr, MPI **Yptr, MPI *A1, MPI *A2, MPI *A3, MPI *A4, MPI *A6, unsigned int n, MPI *MODULUS); 
void ADD_CUBICM(MPI *X1, MPI *Y1, MPI *X2, MPI *Y2, MPI **Xptr, MPI **Yptr, MPI *A1, MPI *A2, MPI *A3, MPI *A4, MPI *A6, MPI *MODULUS); 
void ADD_CUBICMX(); 
void POWER_CUBICMX(); 
void ORDER_CUBICMX(); 
unsigned int ORDER_CUBICM(MPI *X1, MPI *Y1, MPI *A1, MPI *A2, MPI *A3, MPI *A4, MPI *A6, MPI *MODULUS); 
void ORDER_CUBICRX(); 
unsigned int ORDER_CUBICR(MPR *X1, MPR *Y1, MPR *A1, MPR *A2, MPR *A3, MPR *A4, MPR *A6); 
MPI *LEASTQNR(MPI *P); 
MPI *LEASTQNRX(MPI *P); 
void EUCLID(MPI *Aptr, MPI *Bptr, MPIA *Q, MPIA *R, MPIA *S, MPIA *T, MPI **Dptr); 
 
void readme(); 
 
MPIA BUILDMPIA(); 
void ADD_TO_MPIA(MPIA MA, MPI *V, USL n); 
void FREEMPIA(MPIA MA); 
void MPIA_INSERT(MPIA MA, MPI *V, USL n); 
void CORNACCHIA(MPI *A, MPI *B, MPI *M); 
int COMPARE_DIGITS(MPI *M, MPI *N, MPI *U, MPI *V, USL b); 
MPI *SQROOT1(MPI *A, MPI *P, USL n); 
MPI *SQROOT2(MPI *A, USL n); 
MPI *SQROOT3(MPI *A, MPI *P, USL n, MPI**EXPONENT); 
MPI *SQROOT(MPI *A, MPI *N, MPIA *SOL, MPI **MODULUS, USI *l); 
unsigned int SURD(MPI *D, MPI *T, MPI *U, MPI *V, MPIA *AA_SURD, MPIA *U_SURD, MPIA *V_SURD, MPIA *P_SURD, MPIA *Q_SURD, USI surd_flag); 
MPI *SURDX(MPI *D, MPI *T, MPI *U, MPI *V, MPIA *AA_SURD, MPIA *U_ARRAY,MPIA *V_ARRAY, MPIA *P_ARRAY, MPIA *Q_ARRAY); 
void PATZ(MPI *D, MPI *N); 
MPI *PATZX(MPI *D, MPI *N); 
MPI *CORNACCHIAX(MPI *A, MPI *B, MPI *M); 
MPI *SQROOTX(MPI *A, MPI *N, MPIA *Y, MPI **M, USI *l); 
MPI *QUADRATIC(MPI *A, MPI *B, MPI *C, MPI *N, MPIA *SOL); 
MPI *QUADRATICX(MPI *A, MPI *B, MPI *C, MPI *N, MPIA *SOL); 
void GAUSS(MPI *A, MPI *B, MPI *C, MPI *N, MPI **alpha, MPI **gamma, MPI **M); 
void BINARYFORM(MPI *A, MPI *B, MPI *C, MPI *N, MPIA *FSX1, MPIA *FSY1, USI *N1, USI FLAG, USI verb); 
void BINARYFORM1(MPI *A, MPI *B, MPI *C, MPI *N, MPI *VERB); 
MPI *HALFMODX(MPI *Aptr, MPI *Pptr); 
 
void LOG(MPI *A, MPI *B, MPI *D, MPI *R, MPIA *M, MPI **L); 
MPI *LOGX(MPI *A, MPI *B, MPI *D, MPI *R, MPIA *M, MPI **L); 
MPI *CEILINGI(MPI *A, MPI *B); 
MPI *CEILINGIX(MPI *A, MPI *B); 
void TESTLOG1(MPI *A, MPI *B, MPI *D, MPI *R); 
void TESTLOG(MPI *A, MPI *B, MPI *D, MPI *M, MPI *N); 
MPI *TESTLOGX(MPI *A, MPI *B, MPI *D, MPI *M, MPI *N); 
MPI *PRIME_GENERATOR(MPI *M, MPI *N); 
MPI *PRIME_GENERATORX(MPI *M, MPI *N); 
USI SIGN_COUNT(MPIA A); 
MPI *STURM_SEQUENCE(POLYI P, MPI *B, MPI *E); 
POLYI PRIMITIVEPI_(POLYI P); 
void NEXTPHI(USL p, USL *gptr, MPIA *b, MPIA *coef); 
int NOTYET(USL n, USL i, USL *qptr); 
int LPF(USL n); 
POLYI CYCLOTOMIC(MPI *N); 
unsigned int SQUAREFREE_TEST1000(USL n); 
unsigned int PERIOD(MPI *D, MPI *U, MPI *V); 
unsigned int CHECK_UVARRAYS(MPI *U, MPI *Y); 
USI POS(MPI *D); 
MPI *POSX(MPI *D); 
USI NEG(MPI *D, MPI *FLAG, MPI *TABLE_FLAG); 
MPI *NEGX(MPI *D, MPI *FLAG); 
MPI *NEARINT(MPI *M, MPI *N); 
MPI *NEARINTX(MPI *M, MPI *N); 
USI REDUCE_NEG(MPI *A, MPI *B, MPI *C); 
MPI *REDUCE_NEGX(MPI *A, MPI *B, MPI *C); 
MPI *REDUCE_POSX(MPI *A, MPI *B, MPI *C); 
USI REDUCE_POS(MPI *A, MPI *B, MPI *C); 
USI CYCLE_PERIOD(MPI *D, MPI *U, MPI *V, USI i, int sign); 
USI POS0(MPI *D); 
MPI *POS0X(MPI *D); 
MPI *TABLENEGX(MPI *M, MPI *N); 
USL TABLENEG(MPI *M, MPI *N); 
USL TABLEPOS(MPI *M, MPI *N); 
USI POS1(MPI *D, int *norm); 
MPI *TABLEPOSX(MPI *M, MPI *N); 
USL POSITIVITY(MPI *A, MPI *B, MPI *C, MPI *D); 
USL NPROD(USL l,USL m); 
MPI *REFINE(MPI *A, MPI *B, MPI *C, MPI *D); 
USL RANEY(MPI *P, MPI *B, MPI *Q, MPI *R); 
USL DAVISON(USL l, USL m, USL n); 
MPI *DAVISONX(MPI *L, MPI *M, MPI *N); 
USL RANEY1(MPI *P, MPI *Q, MPI *R, MPI *S); 
MPI *RANEY1X(MPI *P, MPI *Q, MPI *R, MPI *S); 
MPI *UNIMODULARX(MPI *P, MPI *Q, MPI *R, MPI *S); 
USL UNIMODULAR(MPI *P, MPI *Q, MPI *R, MPI *S); 
MPI *MAXMPI(MPI *I, MPI *J); 
MPI *MINMPI(MPI *I, MPI *J); 
void MULT_PADIC(MPIA A, MPIA B, MPI *P, MPIA *PROD, USI m, USI n, USI *l); 
int RSV_PADIC(MPIA A, MPIA B, USI m, USI n); 
void SUB_PADIC(MPIA A, MPIA B, MPI *P, MPIA *DIFF, USI m, USI n, USI *l); 
void BASE_PADIC(MPI *B, MPI *N, MPIA *BASE, USI *j); 
void TWOADICSQRT(MPI *A, USI n, MPIA *DIGITS); 
MPI *TWOADICSQRTX(MPI *A, MPI *N, MPIA *DIGITS); 
void PADICSQRT(MPI *A, USI n, MPI *P, MPIA *DIGITS); 
MPI *PADICSQRTX(MPI *A, MPI *N, MPI *P, MPIA *DIGITS); 
MPI *SIGMAK(USI k, MPI *N); 
MPI *SIGMAKX(MPI *K, MPI *N); 
MPI *TAU(USI n); 
MPI *TAUX(MPI *N); 
MPI *TAU_PRIMEPOWERX(MPI *N, MPI *P); 
MPI *TAU_PRIMEPOWER(USI n, USI p); 
MPI *TAU_COMPOSITEX(MPI *N); 
MPI *TAU_COMPOSITE(USI n); 
USI REDUCE_NEG0(MPI *A, MPI *B, MPI *C, MPI **AA, MPI **BB, MPI **CC, MPI **alpha, MPI **beta, MPI **gamma, MPI **delta, USI print_flag); 
USI REP_DEFINITE(MPI *A, MPI *B, MPI *C, MPI *M, USI print_flag); 
MPI *REP_DEFINITEX(MPI *A, MPI *B, MPI *C, MPI *M, MPI *PRINT_FLAG); 
void AUTOMORPH(MPI *A, MPI *B, MPI *D, MPI *T, MPI *U, MPI *X, MPI *Y, MPI **XX, MPI **YY); 
void POWERD(MPI *A, MPI *B, MPI *D, MPI *N, MPI **AA, MPI **BB); 
MPI *EUCLIDI1(MPI *M, MPI *N); 
MPI *CFRACN(MPI *N); 
MPI  *CFRAC_PERIOD(MPI *D); 
#endif