Subversion Repositories wimsdev

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
20 reyssat 1
 
2
!! Selfridge check for primes.
3
!! Checks primes > 500 000, for otherwise it is in prime table.
4
 
5
!set Selfridge_src=Selfridge_table=vector(1000,x,0);\
6
\
7
{ Selfridge_check(x)=if(abs(x)<500000,return(1));\
8
  Selfridge_f=factor(x-1);Selfridge_n=matsize(Selfridge_f)[1];\
9
  for(Selfridge_k=1,Selfridge_n,\
10
    Selfridge_p=Selfridge_f[Selfridge_k,1];\
11
    if(Selfridge_p>=500000,\
12
      if(Selfridge_ptr>=999,return(-1));\
13
      Selfridge_ptr++; Selfridge_table[Selfridge_ptr]=Selfridge_p;\
14
    );\
15
    Selfridge_t=0;for(Selfridge_j=2,1000,\
16
      if(Mod(Selfridge_j,x)^(x-1)!=Mod(1,x), return(0));\
17
      Selfridge_d=(x-1)/Selfridge_p;\
18
      if(Mod(Selfridge_j,x)^Selfridge_d!=Mod(1,x),\
19
        Selfridge_t=Selfridge_j;break();\
20
      );\
21
    );\
22
    if(Selfridge_t==0,return(-1));\
23
  ); return(1);\
24
}\
25
\
26
{ Selfridge(x)=Selfridge_table[1]=x;\
27
  if(!isprime(x),return(0));\
28
  Selfridge_step=1; Selfridge_ptr=1;\
29
  while(Selfridge_step<=Selfridge_ptr,\
30
    Selfridge_xx=Selfridge_check(Selfridge_table[Selfridge_step]);\
31
    if(Selfridge_xx==0 || Selfridge_xx==-1, return(-1));\
32
    Selfridge_step++;\
33
  ); return(1);\
34
}\
35
\
36
selfridge(x)=Selfridge(x);
37
!exit
38
 
39
:
40
Selfridge_table=vector(1000,x,0);
41
 
42
{ Selfridge_check(x)=if(abs(x)<500000,return(1));
43
  Selfridge_f=factor(x-1);Selfridge_n=matsize(Selfridge_f)[1];
44
  for(Selfridge_k=1,Selfridge_n,
45
    Selfridge_p=Selfridge_f[Selfridge_k,1];
46
    if(Selfridge_p>=500000,
47
      if(Selfridge_ptr>=999,return(-1));
48
      Selfridge_ptr++; Selfridge_table[Selfridge_ptr]=Selfridge_p;
49
    );
50
    Selfridge_t=0;for(Selfridge_j=2,1000,
51
      if(Mod(Selfridge_j,x)^(x-1)!=Mod(1,x), return(0));
52
      Selfridge_d=(x-1)/Selfridge_p;
53
      if(Mod(Selfridge_j,x)^Selfridge_d!=Mod(1,x),
54
        Selfridge_t=Selfridge_j;break();
55
      );
56
    );
57
    if(Selfridge_t==0,return(-1));
58
  ); return(1);
59
}
60
 
61
{ Selfridge(x)=Selfridge_table[1]=x;
62
  if(!isprime(x),return(0));
63
  Selfridge_step=1; Selfridge_ptr=1;
64
  while(Selfridge_step<=Selfridge_ptr,
65
    Selfridge_xx=Selfridge_check(Selfridge_table[Selfridge_step]);
66
    if(Selfridge_xx==0 || Selfridge_xx==-1, return(-1));
67
    Selfridge_step++;
68
  ); return(1);
69
}
70
 
71
selfridge(x)=Selfridge(x);
72