虚心求解。。。寻找回文质数,当b较大时,便会出现错误。跪求解决。。。
描述:
因为151既是一个质数又是一个回文数(从左到右和从右到左看是一样的),所以151是回文质数.
写一个程序来找出范围[a,b](5<=a<b<=100,000,000间的所有回文质数.
输入:
第一行 两个整数:a和b.
输出:
输出一个回文质数的列表,一行一个.
输入样例:
5 500
输出样例:
5
7
11
101
131
151
181
191
313
353
373
383
以下为鄙人写的小代码,望高手帮助修改,或能提供新思路。不甚感激。
#include <stdio.h>#include <math.h>int a,b;void scan();void searchpri();void isPal(int*prime,int i);int main(){ scan(); searchpri(); return 0;}void scan(){ scanf("%d%d",&a,&b);}void searchpri(){ int x,m,prime[100000],f=1,i=0; //此处分配空间大小是否应该改变??但再大时,又回出现无法运行的情况。 for(x=a;x<=b;x++) { for(m=2;m<=sqrt(x);m++) { if(x%m==0) { f=0; break; } } if(f==0) { f=1; } else { prime[i++]=x; } } prime[i]='\0'; isPal(prime,i);}void isPal(int*prime,int i){ int pal[10]; int x,j=0,k=0,f=1,m,n; for(j=0;j<i;j++) { k=0; x=prime[j]; while(x!=0) { pal[k++]=x%10; x=x/10; } for(m=0,n=k-1;m<n;m++,n--) { if(pal[m]!=pal[n]) { f=0; break; } } if(f==1) { printf("%d\n",prime[j]); } else { f=1; } }}