hdu 1431 素数回文

来源:互联网 发布:华为和星环大数据 编辑:程序博客网 时间:2024/05/16 00:49

分析:先生成回文数,在判断是不是质数;生成回文数的方法很巧妙,在网上找的资料


#include<iostream>#include<cstdio>#include<math.h>using namespace std;int palind_prime[10000];bool is_prime(int a){for(int i=2;i<=(int)sqrt(a+0.5);i++){if(a%i==0)return false;}return true;}int main(){   int c=1,temp;    for(int i=5;i<=9;i++)//一位数   {      temp=i;  if(is_prime(temp))  palind_prime[c++]=temp;   }   for(int i=1;i<=9;i++)//两位数   {   temp=11*i;   if(is_prime(temp))   palind_prime[c++]=temp;   }   for(int i=1;i<=9;i++)//三位数   {   for(int j=0;j<=9;j++)   {      temp=101*i+10*j;      if(is_prime(temp))      palind_prime[c++]=temp;   }   }   for(int i=1;i<=9;i++)//四位数   {   for(int j=0;j<=9;j++)   {      temp=1001*i+110*j;      if(is_prime(temp))      palind_prime[c++]=temp;   }   }   for(int i=1;i<=9;i++)//五位数   for(int j=0;j<=9;j++)   for(int k=0;k<=9;k++)   {   temp=10001*i+1010*j+100*k;   if(is_prime(temp))   palind_prime[c++]=temp;   }   for(int i=1;i<=9;i++)//六位数   for(int j=0;j<=9;j++)   for(int k=0;k<=9;k++)   {   temp=100001*i+10010*j+1100*k;   if(is_prime(temp))   palind_prime[c++]=temp;   }  for(int i=1;i<=9;i++)//七位数   for(int j=0;j<=9;j++)   for(int k=0;k<=9;k++)       for(int t=0;t<=9;t++)      {      temp=1000001*i+100010*j+10100*k+1000*t;      if(is_prime(temp))    palind_prime[c++]=temp;     }    /*   printf("%d\n\n",c-1);   for(int i=1;i<c;i++)   {   printf("%d  ",palind_prime[i]);   if(i%10==0)   printf("\n");   }*/   int a,b;   while(scanf("%d %d",&a,&b)!=EOF)   {   int left,right;       for(int i=1;i<c;i++)  if(palind_prime[i]>=a)  { left=i; break;  }   for(int i=c-1;i>=1;i--)   if(palind_prime[i]<=b)   {   right=i;   break;   }   for(int i=left;i<=right;i++)   printf("%d\n",palind_prime[i]);   printf("\n");   }    system("pause");return 0;}


原创粉丝点击