求出两个数之间的既是素数又是回文数的所有整数,先构造回文数(做得繁琐了),再判断是否素数 #include<iostream> #include<fstream> #include<string> #include<memory.h> #include<cstdio> #include<queue> #include<vector> using namespace std; ifstream fin("pprime.in"); ofstream fout("pprime.out"); int plist[10000],pcount=0; int a,b; bool check(int n){ if(n>=a&&n<=b) return true; else return false; } int prime(int n){ int i; if ((n!=2&&!(n%2))||(n!=3&&!(n%3))||(n!=5&&!(n%5))||(n!=7&&!(n%7))) return 0; for (i=0;plist[i]*plist[i]<=n;i++) if (!(n%plist[i])) return 0; return n>1; } void initprime(){ int i; for (plist[pcount++]=2,i=3;i<50000;i++) if (prime(i)) plist[pcount++]=i; } bool ispal(int n){ char strl[20]; int len1=0; while(n){ strl[len1++]=n%10; n/=10; } for(int i=len1-1,j=0;i>=0;i--,j++){ if(strl[i]!=strl[j]) return false; } return true; } void get1(){ for(int i=5;i<10;i+=2){ if(prime(i)&&check(i)) fout<<i<<endl; } } void get2(){ for(int d1=1;d1<=9;d1+=2){ int t=d1*10+d1; if(prime(t)&&check(t)) fout<<t<<endl; } } void get3(){ for(int d1=1;d1<=9;d1+=2){ for(int d2=0;d2<=9;d2++){ int t=d1*100+d2*10+d1; if(prime(t)&&check(t)) fout<<t<<endl; } } } void get4(){ for(int d1=1;d1<=9;d1+=2){ for(int d2=0;d2<=9;d2++){ int t=d1*1000+d2*100+d2*10+d1; if(prime(t)&&check(t)) fout<<t<<endl; } } } void get5(){ for(int d1=1;d1<=9;d1+=2){ for(int d2=0;d2<=9;d2++){ for(int d3=0;d3<=9;d3++){ int t=d1*10000+d2*1000+d3*100+d2*10+d1; if(prime(t)&&check(t)) fout<<t<<endl; } } } } void get6(){ for(int d1=1;d1<=9;d1+=2){ for(int d2=0;d2<=9;d2++){ for(int d3=0;d3<=9;d3++){ int t=d1*100000+d2*10000+d3*1000+d3*100+d2*10+d1; if(prime(t)&&check(t)) fout<<t<<endl; } } } } void get7(){ for(int d1=1;d1<=9;d1+=2){ for(int d2=0;d2<=9;d2++){ for(int d3=0;d3<=9;d3++){ for(int d4=0;d4<=9;d4++){ int t=d1*1000000+d2*100000+d3*10000+d4*1000+d3*100+d2*10+d1; if(prime(t)&&check(t)) fout<<t<<endl; } } } } } void get8(){ for(int d1=1;d1<=9;d1+=2){ for(int d2=0;d2<=9;d2++){ for(int d3=0;d3<=9;d3++){ for(int d4=0;d4<=9;d4++){ int t=d1*10000000+d2*1000000+d3*100000+d4*10000+d4*1000+d3*100+d2*10+d1; if(prime(t)&&check(t)) fout<<t<<endl; } } } } } void get9(){ for(int d1=1;d1<=9;d1+=2){ for(int d2=0;d2<=9;d2++){ for(int d3=0;d3<=9;d3++){ for(int d4=0;d4<=9;d4++){ for(int d5=0;d5<=9;d5++){ int t=d1*100000000+d2*10000000+d3*1000000+d4*100000+d5*10000+d4*1000+d3*100+d2*10+d1; if(prime(t)&&check(t)) fout<<t<<endl; } } } } } } void solve(int i){ switch(i){ case 1:get1();break; case 2:get2();break; case 3:get3();break; case 4:get4();break; case 5:get5();break; case 6:get6();break; case 7:get7();break; case 8:get8();break; case 9:get9();break; } } int main(){ initprime(); fin>>a>>b; int at=a,bt=b; int n1=0,n2=0; while(at){ at/=10; n1++; } while(bt){ bt/=10; n2++; } for(int i=n1;i<=n2;i++){ solve(i); } return 0; }