[BACK]Return to squfof.gp CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / pari / examples

Annotation of OpenXM_contrib/pari/examples/squfof.gp, Revision 1.1.1.1

1.1       maekawa     1: squfof(n)=
                      2: {
                      3:
                      4:   if (isprime(n), return(n));
                      5:   if (issquare(n), return(sqrtint(n)));
                      6:
                      7:   p=factor(n,0)[1,1];
                      8:   if (p!=n, return(p));
                      9:
                     10:   if (n%4==1,
                     11:     dd=n; d=sqrtint(dd); b=(((d-1)\2)<<1) + 1
                     12:   ,
                     13:     dd=n<<2; d=sqrtint(dd); b=(d\2)<<1
                     14:   );
                     15:   f=Qfb(1,b,(b^2-dd)>>2,0.);
                     16:   q=[]; lq=0; ii=0; l=sqrtint(d);
                     17:
                     18:   while (1,
                     19:     f=qfbred(f,3,dd,d);
                     20:     ii++; a=component(f,1);
                     21:     if (!(ii%2),
                     22:       if (issquare(a),
                     23:        as=sqrtint(a); j=1;
                     24:        while (j<=lq,
                     25:          if (as==q[j], break);
                     26:          j++
                     27:        );
                     28:        if (j>lq, break)
                     29:       );
                     30:     );
                     31:
                     32:     if (abs(a)<=l,
                     33:        q=vecconcat(q,abs(a));
                     34:        print(q); lq++;
                     35:     )
                     36:   );
                     37:
                     38:   gs=gcd(as,dd);
                     39:   print("i = ",ii); print(f);
                     40:   gs=gcd(gs,bb=component(f,2));
                     41:   if (gs>1, return (gs));
                     42:
                     43:   g=qfbred(Qfb(as,-bb,as*component(f,3),0.),3,dd,d);
                     44:   b=component(g,2);
                     45:   until (b1==b,
                     46:     b1=b; g=qfbred(g,3,dd,d);
                     47:     b=component(g,2);
                     48:   );
                     49:   a=abs(component(g,1));
                     50:   if (!(a%2),a>>=1);
                     51:   a
                     52: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>