这种多组输入的第一想法是打表,但数据太大,果然超时,然后就用暴力法了,一样超时,但是这道题如果把i限制在1e7时竟然能通过。
原来:这是一个技巧,我们可以尝试找出最大的回文素数来,发现范围内的最大回文素数为9989899,这样就可以节省好多时间!
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <set>
#include <map>
#include <vector>
#include <stack>
#include <queue>
#include <bitset>
#include <unordered_map>
#include <unordered_set>
#define vi vector<int>
#define si set<int>
#define pi pair<int,int>
#define pii pair<ll,ll>
#define pb push_back
#define mp make_pair
#define lowbit(x) (x&(-x))
#define sci(x) scanf("%d",&(x))
#define scll(x) scanf("%lld",&(x))
#define sclf(x) scanf("%lf",&(x))
#define pri(x) printf("%d",(x))
#define rep(i,j,k) for(int i=j;i<=k;++i)
#define per(i,j,k) for(int i=j;i>=k;--i)
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
bool isPrime(int n){
for(int i=2;i*i<=n;i++){
if(n%i==0)
return false;
}
return true;
}
int isPr(int n){
int pr[20];
int t=0;
while(n){
pr[t++]=n%10;
n/=10;
}
for(int i=0,j=t-1;i<t/2;i++,j--)
if(pr[i]!=pr[j])
return 0;
return 1;
}
int main(){
int a,b;
while(scanf("%d%d",&a,&b)!=EOF){
for(int i=a;i<=b&&i<10000000;i++){
if(isPr(i)&&isPrime(i)){
printf("%d\n",i);
}
}
printf("\n");
}
return 0;
}