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

Diff for /OpenXM_contrib/pari-2.2/examples/Attic/rho.gp between version 1.1 and 1.2

version 1.1, 2001/10/02 11:16:59 version 1.2, 2002/09/11 07:26:45
Line 1 
Line 1 
 rho1(n)=  rho1(n)=
 {  { local(x,y);
   local(x,y);  
   
   x=2; y=5;    x=2; y=5;
   while(gcd(y-x,n)==1,    while(gcd(y-x,n)==1,
Line 11  rho1(n)=
Line 10  rho1(n)=
 }  }
   
 rho2(n)=  rho2(n)=
 {  { local(m);
   local(m);  
   
   m=rho1(n);    m=rho1(n);
   if (isprime(m),    if (isprime(m),
Line 28  rho2(n)=
Line 26  rho2(n)=
 }  }
   
 rho(n)=  rho(n)=
 {  { local(m = factor(n,0));
   local(m);  
   
   m=factor(n,0); print(m);    print(m); m = m[,1]; n = m[#m];
   n=m[length(m[,1]),1];  
   if (!isprime(n),rho2(n));    if (!isprime(n),rho2(n));
 }  }
   
 rhobrent(n)=  rhobrent(n)=
 {  { local(x,y,x1,k,l,p,c,g);
   x=y=x1=2; k=l=p=1; c=0;  
     x1=x=y=2; k=l=p=1; c=0;
   while (1,    while (1,
     x=(x^2+1)%n; p=(p*(x1-x))%n; c++;      x=(x^2+1)%n; p=(p*(x1-x))%n;
       c++;
     if (c==20,      if (c==20,
       if (gcd(p,n)>1, break);        if (gcd(p,n)>1, break);
       y=x;c=0        y=x; c=0
     );      );
     k--;      k--;
     if (!k,      if (!k,
       if (gcd(p,n)>1, break);        if (gcd(p,n)>1, break);
   
       x1=x; k=l; l <<= 1; \\ l = 2*l        x1=x; k=l; l <<= 1;
       for (j=1,k, x=(x^2+1)%n);        for (j=1,k, x=(x^2+1)%n);
       y=x; c=0        y=x; c=0
     )      )
   );    );
   g=1;    until (g!=1,
   while (g==1,  
     y=(y^2+1)%n;      y=(y^2+1)%n;
     g=gcd(x1-y,n)      g=gcd(x1-y,n)
   );    );
   if (g==n,error("algorithm fails"));    if (g==n, error("algorithm fails"));
   g    g
 }  }

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

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