Annotation of 43BSDTahoe/usr.lib/libmp/gcd.c, revision 1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.