(PARI)eva(n)=替代(Pol(n),x,10)
rot(n)=如果(#Str(n)==1,v=向量(1),v=矢量(#n-1));对于(i=2,#n,v[i-1]=n[i]);u=矢量(#n);对于(i=1,#n,u[i]=n[i]);v=连接(v,u[1]);v(v)
is_circularprime(p)=my(d=数字(p),r=rot(d));如果(vecmin(d)==0,return(0),而(1,如果(!ispseudoprime(eva(r)),return(0));r=rot(r);如果(r==d,返回(1)))
对于素数(p=1,如果(vecmax(数字(p))>1,如果(is_circularprime(p),打印1(p,“,”))
(PARI)/*下面是一个速度快得多的程序,它只测试十进制展开式由集合{1,3,7,9}中的数字组成的数字*/
eva(n)=替代(Pol(n),x,10)
next_v(vec)=我的(k=#vec);如果(vecmin(vec)==9,vec=concat(向量(#vec,t,1),[3]);回报(vec));当(k>0时,如果(vec[k]==9,vec[k]=1,如果(vec[k]==3,vec[C]=7;返回(vec),vec[k]=vec[k]+2,返回(vec));k——)
rot(n)=如果(#Str(n)==1,v=向量(1),v=矢量(#n-1));对于(i=2,#n,v[i-1]=n[i]);u=矢量(#n);对于(i=1,#n,u[i]=n[i]);v=连接(v,u[1]);v(v)
搜索(n)=我的(d=数字(n),e=[],d=0);而(1,e=rot(d);while(1,如果(!ispseudoprime(eva(e))),break,e=rot(e);如果(e==d&&ispseudoprime(eva(e)),则打印1(eva(d),“,”);断裂);d=下一个v(d))
搜索范围(n)=如果(n<12,对于素数(p=n,10,打印1(p,“,”));搜索(13),my(d=数字(n));对于(k=1,#d,如果(d[k]%2==0,d[k]++,如果(d[k]==5,d[k]=7));搜索(eva(d))
/*按如下方式从1开始搜索:*/
|