这题绝对是个大坑,,,一不小心就超时。。。尝试了无数次,我终于通过了,激动。。
以下是我的思路:
1.首先写判断回文的函数
(题目最后有提示我们说先判断是否是回文,再判断是否是质数,并且提示我们先构造回文——我觉得构造回文有点点麻烦,还不如直接判断,事实上,直接判断并未超时)
2.写判断素数的函数
(次数有坑:题目中说明了啊a>=5,也就是说不用考虑1和2,这样代码就更加简洁了)
判断是否是素数的终止条件应该是x<sqrt(x)这样能减少判断次数,节省时间
3.直接上代码:
#include<bits/stdc++.h>
using namespace std;
bool ISS(int x)//判断是否是质数
{
for(int i=2;i<=sqrt(x);i++ )
if(x%i==0) return false;
return true;
}
bool ISH(int x)//判断是否是回文
{
int N_x=0;//记录翻转之后的数,即新的x
int temp=x;
while(temp)
{
N_x=N_x*10+temp%10;
temp/=10;
}
if(N_x==x) return true;
else return false;
}
int main()
{
int a,b;
cin>>a>>b;
for(int i=a;i<=b;i++)
{
if(i%2==0) continue;//过滤偶数,减少判断
if((i>1000&&i<10000)||(i>100000&&i<1000000)||(i>10000000&&i<100000000)) continue;//4.6.8位的回文数都能被11整除
if(!ISH(i)) continue;
if(!ISS(i)) continue;
cout<<i<<endl;
}
}