以下是本人写的代码,但是时间太长了,要求在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,因为回文数计算量小,而且比质数少很多,根据&&的短路性质,第一个条件不成立,就不会计算第二个条件。
实在不行,你可以先算出来,因为这个没有输入,答案固定,提交到网站的时候直接输出答案,用来糊弄这种网站很有用