hdu-oj 1431 素数回文

来源:互联网 发布:粤知一二肥龙个人资料 编辑:程序博客网 时间:2024/05/14 03:02

素数回文

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 11237    Accepted Submission(s): 2617


Problem Description
xiaoou33对既是素数又是回文的数特别感兴趣。比如说151既是素数又是个回文。现在xiaoou333想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a 跟b 之间满足条件的数。(5 <= a < b <= 100,000,000);
 Input
这里有许多组数据,每组包括两组数据a跟b。
 Output
对每一组数据,按从小到大输出a,b之间所有满足条件的素数回文数(包括a跟b)每组数据之后空一行。
 Sample Input
5 500
 Sample Output
5711101131151181191313353373383
 
解题思路:应先判断是回文数在判断素数(数据较大)
附代码:
#include <stdio.h>#include <math.h>//int notprime[10000010];int isprime(int x){  int i;   //if(x==1)     // return 0;   for(i=2;i<=sqrt(x);i++)      if(x%i==0)         return 0;      return 1;}bool isPalindrome(int num){int pal = 0;int origin = num;while(num){pal *= 10;pal += num % 10;num /= 10;}return pal == origin;}int main(){ int a,b,i,j,k,m;   /*for(i=2;i*i<10000010;i++)    {  if(!notprime[i])        {  for(j=i*i;j<10000010;j+=i)              notprime[j]=1;        }    }*/  while(scanf("%d%d",&a,&b)!=EOF)  { for(i=a;i<=b&&i<=9989899;i++)    { if(i<10)       {         if(isprime(i))           printf("%d\n",i);       }       else       {  k=i;         if(isPalindrome(k))           { if(isprime(i))               printf("%d\n",i);            }             }    }    printf("\n");  }   return 0;}

0 0