首页 > 代码库 > 素数回文
素数回文
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
5
7
11
101
131
151
181
191
313
353
373
383
分析:除了11外,任意偶数长度的回文都不是素数因为都会被11整除。题目给的范围里最大的回文素数就是9999999。所以数组只要开到这个数就够了,减少了很多数的筛选与数组的空间。
1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 5 #define N 10000000 //9999999是题目要求范围的最大回文数 6 char flag[N]; 7 8 int palindrome_number(int number); 9 10 int main(){11 int i;12 int j;13 int a;14 int b;15 16 memset(flag,‘0‘,N);17 flag[0]=‘1‘;18 flag[1]=‘1‘;19 20 for(i=2;i<=sqrt((double)N);i++){21 if(flag[i]==‘0‘){22 for(j=i*i;j<=N;j+=i)23 flag[j]=‘1‘;24 }25 }26 27 while(scanf("%d%d",&a,&b)!=EOF){28 for(i=a;i<=b;i++){29 if(i>N-1)30 continue;31 32 if(palindrome_number(i)==1 && flag[i]==‘0‘)33 printf("%d\n",i);34 }35 36 printf("\n");37 }38 39 return 0;40 }41 42 int palindrome_number(int number){43 int array[9];44 int i;45 int length;46 int flag;47 48 i=0;49 while(number){50 array[i]=number%10;51 i++;52 number/=10; 53 }54 length=i;55 56 flag=0;57 for(i=0;i<length/2;i++){58 if(array[i]!=array[length-i-1]){59 flag=1;60 break;61 }62 }63 64 if(flag==1)65 return 0;66 67 else68 return 1;69 }
素数回文
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。