输出所有7位的回文素数(首位不为0,从左到右读与从右到左读都是一样,这个数就叫做回文数).如:7069607、9989899就是符合这种要求的两个数。

以下是本人写的代码,但是时间太长了,要求在800ms以内。希望友友们帮帮忙!


#include <stdio.h>
#include <math.h>
int isPrime(int n);
int isHui(int n);
int main(void){
  int i;
  for(i=1003001;i<=9989899;i++){
    if(isPrime(i)&&isHui(i)){
      printf("%d\n",i);
    }
  }
  return 0;
}
int isPrime(int n){
  int i;
  for(i=2;i<=sqrt(n);i++){
    if(n%i==0){
      return 0;
    }
  }
  return 1;
}
int isHui(int n){
  int i,a[7];
  for(i=0;i<7;i++){
    a[i]=n%10;
    n/=10;
  }
  if((a[0]==a[6])&&(a[1]==a[5])&&a[2]==a[4]){
    return 1;
  }
  return 0;
}

sqrt(n)可以放到循环外面,避免重复计算
主函数的循环可以一次加二,因为除2以外只有奇数是质数
循环中的if最好先判断isHui,因为回文数计算量小,而且比质数少很多,根据&&的短路性质,第一个条件不成立,就不会计算第二个条件。
实在不行,你可以先算出来,因为这个没有输入,答案固定,提交到网站的时候直接输出答案,用来糊弄这种网站很有用