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

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

1.1       maekawa     1: rho1(n)=
                      2: {
                      3:   local(x,y);
                      4:
                      5:   x=2; y=5;
                      6:   while(gcd(y-x,n)==1,
                      7:     x=(x^2+1)%n;
                      8:     y=(y^2+1)%n; y=(y^2+1)%n
                      9:   );
                     10:   gcd(n,y-x)
                     11: }
                     12:
                     13: rho2(n)=
                     14: {
                     15:   local(m);
                     16:
                     17:   m=rho1(n);
                     18:   if (isprime(m),
                     19:     print(m)
                     20:   ,
                     21:     rho2(m)
                     22:   );
                     23:   if (isprime(n/m),
                     24:     print(n/m)
                     25:   ,
                     26:     rho2(n/m)
                     27:   );
                     28: }
                     29:
                     30: rho(n)=
                     31: {
                     32:   local(m);
                     33:
                     34:   m=factor(n,0); print(m);
                     35:   n=m[length(m[,1]),1];
                     36:   if (!isprime(n),rho2(n));
                     37: }
                     38:
                     39: rhobrent(n)=
                     40: {
                     41:   x=y=x1=2; k=l=p=1; c=0;
                     42:   while (1,
                     43:     x=(x^2+1)%n; p=(p*(x1-x))%n; c++;
                     44:     if (c==20,
                     45:       if (gcd(p,n)>1, break);
                     46:       y=x;c=0
                     47:     );
                     48:     k--;
                     49:     if (!k,
                     50:       if (gcd(p,n)>1, break);
                     51:
                     52:       x1=x; k=l; l <<= 1; \\ l = 2*l
                     53:       for (j=1,k, x=(x^2+1)%n);
                     54:       y=x; c=0
                     55:     )
                     56:   );
                     57:   g=1;
                     58:   while (g==1,
                     59:     y=(y^2+1)%n;
                     60:     g=gcd(x1-y,n)
                     61:   );
                     62:   if (g==n,error("algorithm fails"));
                     63:   g
                     64: }

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