素数回文
先产生所有范围内的回文数,再在范围内找出所有 的素数;
嘿嘿,判断素数的方法就太牛逼了,好难理解
/* ID: nanke691 LANG: C++ TASK: pprime */ #include<iostream> #include<fstream> #include<string.h> #include<stdlib.h> #include<math.h> using namespace std; long long b[10000]={5,7,11}; int p[8]={4,2,4,2,4,6,2,6}; int prime(int n)//判断素数 { int i=7,j,q; if(n==1)return 0; if(n==2||n==5||n==3)return 1; if(n%2==0||n%3==0||n%5==0)return 0; q=(int)sqrt((double)n); for(;i<=q;){ for(j=0;j<8;j++){ if(n%i==0)return 0; i+=p[j]; } if(n%i==0)return 0; } return 1; } int creat() { int i,j,k,l,m,count=3; for(i=1;i<=9;i+=2) for(j=0;j<=9;j++) b[count++]=100*i+10*j+i; for(i=1;i<=9;i+=2) for(j=0;j<=9;j++) for(k=0;k<=9;k++) b[count++]=10000*i+1000*j+k*100+j*10+i; for(i=1;i<=9;i+=2) for(j=0;j<=9;j++) for(k=0;k<=9;k++) for(l=0;l<=9;l++) b[count++]=1000000*i+100000*j+k*10000+l*1000+k*100+j*10+i; return count-1; } int main() { long long a,c,i,temp,n; n=creat(); freopen("pprime.in","r",stdin); freopen("pprime.out","w",stdout); scanf("%lld %lld",&a,&c); if(a>c) { temp=a;a=c;c=temp; } for(i=0;i<n;i++) if(a<=b[i]) { if(c>=b[i]) { if(prime(b[i])) printf("%lld\n",b[i]); } else break; } return 0; }