hdu 1431素数回文
http://acm.hdu.edu.cn/showproblem.php?pid=1431
View Code
1 #include<stdio.h> 2 #include<string.h> 3 bool prime[10000002];//int一直超内存,wa好多次,改成bool就过了 4 int pos[664580]; 5 int num; 6 void puan_prim() 7 { 8 memset(pos,-1,sizeof(pos)); 9 num=0; 10 memset(prime,false,sizeof(prime)); 11 for(int i=2;i<=10000001;i++) 12 { 13 if(!prime[i]) 14 { 15 num++; 16 pos[num]=i; 17 } 18 for(int j=1;j<=num&&i*pos[j]<=10000001;j++) 19 { 20 prime[i*pos[j]]=true; 21 if(i%pos[j]==0) break; 22 } 23 } 24 } 25 int main() 26 { 27 int n; 28 int b; 29 char str1[11]; 30 char str2[11]; 31 puan_prim(); 32 while(~scanf("%d%d",&n,&b)) 33 { 34 //printf("%d\n",num); 35 int i; 36 int len; 37 int start,end; 38 for(i=1;i<=num;i++) 39 if(pos[i]>=n) break; 40 start=i; 41 if(b<=9989899) 42 { 43 44 45 for(int i=start;pos[i]<=b&&pos[i]>0;i++) 46 { 47 sprintf(str1,"%d",pos[i]); 48 len=strlen(str1); 49 int flag=0; 50 for(int jj=0;jj<len;jj++) 51 { 52 if(str1[jj]!=str1[len-jj-1]) 53 { 54 flag=1; 55 break; 56 } 57 } 58 59 60 if(flag==0) printf("%s\n",str1); 61 } 62 } 63 else 64 { 65 66 for(int i=start;pos[i]<=9989899&&pos[i]>0;i++) 67 { 68 sprintf(str1,"%d",pos[i]); 69 len=strlen(str1); 70 int flag=0; 71 for(int jj=0;jj<len;jj++) 72 { 73 if(str1[jj]!=str1[len-jj-1]) 74 { 75 flag=1; 76 break; 77 } 78 } 79 80 81 if(flag==0) printf("%s\n",str1); 82 } 83 } 84 printf("\n"); 85 } 86 }