#include <stdio.h> #include <math.h> int main(){ int a,b; int num[12000]={0}; //保存回文数的数组 int al[8]={0}; //保存取余后的原位置上的数字 int i,j,k=0,ii,temp,length=0,sum,count=0; //ii是算术平方根,length是原数字的位数长度,sum是反过来的和 scanf("%d %d",&a,&b); for(i=5; i<=b; i+=2){ length=0; temp=i; sum=0; // printf("现在的i=%d\n",i); while(temp != 0){ //分解数字 al[length]=temp%10; temp/=10; length++; } for(j=0; j<length; j++){ //根据分解的数字,算倒序的和 sum=sum*10+al[j]; } if(i == sum){ //如果倒序和正序相等,视为回文数,存入num数组中。 num[k]=i; //printf("**回文数i=%d\n",i); k++; } } //printf("壹亿下有%d个回文数\n",k); //11003个,所以开12000个数组空间 for(i=0; i<k; i++){ ii=sqrt(num[i]); for(j=2; j<=ii; j++){ if(num[i]%j == 0){ break; } } if(j > ii){ if(num[i]>=a && num[i]<=b){ printf("%d\n",num[i]); count++; } } } //printf("壹亿下有%d个回文质数\n",count); //779个回文质数,算上2,3是781个 return 0; }
用C写的,数组也不小了。先判断回文数,再判断素数比较快。
刚开始提交的时候,数组开小了,加了几次RE,听说还有动态数组,后面再说。