Subversion Repositories wimsdev

Rev

Blame | Last modification | View Log | RSS feed


!! Selfridge check for primes.
!! Checks primes > 500 000, for otherwise it is in prime table.

!set Selfridge_src=Selfridge_table=vector(1000,x,0);\
\
{ Selfridge_check(x)=if(abs(x)<500000,return(1));\
  Selfridge_f=factor(x-1);Selfridge_n=matsize(Selfridge_f)[1];\
  for(Selfridge_k=1,Selfridge_n,\
    Selfridge_p=Selfridge_f[Selfridge_k,1];\
    if(Selfridge_p>=500000,\
      if(Selfridge_ptr>=999,return(-1));\
      Selfridge_ptr++; Selfridge_table[Selfridge_ptr]=Selfridge_p;\
    );\
    Selfridge_t=0;for(Selfridge_j=2,1000,\
      if(Mod(Selfridge_j,x)^(x-1)!=Mod(1,x), return(0));\
      Selfridge_d=(x-1)/Selfridge_p;\
      if(Mod(Selfridge_j,x)^Selfridge_d!=Mod(1,x),\
        Selfridge_t=Selfridge_j;break();\
      );\
    );\
    if(Selfridge_t==0,return(-1));\
  ); return(1);\
}\
\
{ Selfridge(x)=Selfridge_table[1]=x;\
  if(!isprime(x),return(0));\
  Selfridge_step=1; Selfridge_ptr=1;\
  while(Selfridge_step<=Selfridge_ptr,\
    Selfridge_xx=Selfridge_check(Selfridge_table[Selfridge_step]);\
    if(Selfridge_xx==0 || Selfridge_xx==-1, return(-1));\
    Selfridge_step++;\
  ); return(1);\
}\
\
selfridge(x)=Selfridge(x);
!exit

:
Selfridge_table=vector(1000,x,0);

{ Selfridge_check(x)=if(abs(x)<500000,return(1));
  Selfridge_f=factor(x-1);Selfridge_n=matsize(Selfridge_f)[1];
  for(Selfridge_k=1,Selfridge_n,
    Selfridge_p=Selfridge_f[Selfridge_k,1];
    if(Selfridge_p>=500000,
      if(Selfridge_ptr>=999,return(-1));
      Selfridge_ptr++; Selfridge_table[Selfridge_ptr]=Selfridge_p;
    );
    Selfridge_t=0;for(Selfridge_j=2,1000,
      if(Mod(Selfridge_j,x)^(x-1)!=Mod(1,x), return(0));
      Selfridge_d=(x-1)/Selfridge_p;
      if(Mod(Selfridge_j,x)^Selfridge_d!=Mod(1,x),
        Selfridge_t=Selfridge_j;break();
      );
    );
    if(Selfridge_t==0,return(-1));
  ); return(1);
}

{ Selfridge(x)=Selfridge_table[1]=x;
  if(!isprime(x),return(0));
  Selfridge_step=1; Selfridge_ptr=1;
  while(Selfridge_step<=Selfridge_ptr,
    Selfridge_xx=Selfridge_check(Selfridge_table[Selfridge_step]);
    if(Selfridge_xx==0 || Selfridge_xx==-1, return(-1));
    Selfridge_step++;
  ); return(1);
}

selfridge(x)=Selfridge(x);