|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)gcd.c 5.3 (Berkeley) 3/2/87"; ! 3: #endif not lint ! 4: ! 5: #include <mp.h> ! 6: gcd(a,b,c) MINT *a,*b,*c; ! 7: { MINT x,y,z,w; ! 8: x.len=y.len=z.len=w.len=0; ! 9: move(a,&x); ! 10: move(b,&y); ! 11: while(y.len!=0) ! 12: { mdiv(&x,&y,&w,&z); ! 13: move(&y,&x); ! 14: move(&z,&y); ! 15: } ! 16: move(&x,c); ! 17: xfree(&x); ! 18: xfree(&y); ! 19: xfree(&z); ! 20: xfree(&w); ! 21: return; ! 22: } ! 23: invert(a, b, c) MINT *a, *b, *c; ! 24: { MINT x, y, z, w, Anew, Aold; ! 25: int i = 0; ! 26: x.len = y.len = z.len = w.len = Aold.len = 0; ! 27: Anew.len = 1; ! 28: Anew.val = xalloc(1, "invert"); ! 29: *Anew.val = 1; ! 30: move(b, &x); ! 31: move(a, &y); ! 32: while(y.len != 0) ! 33: { mdiv(&x, &y, &w, &z); ! 34: move(&Anew, &x); ! 35: mult(&w, &Anew, &Anew); ! 36: madd(&Anew, &Aold, &Anew); ! 37: move(&x, &Aold); ! 38: move(&y, &x); ! 39: move(&z, &y); ! 40: i++; ! 41: } ! 42: move(&Aold, c); ! 43: if( (i&01) == 0) msub(b, c, c); ! 44: xfree(&x); ! 45: xfree(&y); ! 46: xfree(&z); ! 47: xfree(&w); ! 48: xfree(&Aold); ! 49: xfree(&Anew); ! 50: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.