xiaoou33对既是素数又是回文的数特别感兴趣。比如说151既是素数又是个回文。现在xiaoou333想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a 跟b 之间满足条件的数。(5 <= a < b <= 100,000,000);
Input
这里有许多组数据,每组包括两组数据a跟b。
Output
对每一组数据,按从小到大输出a,b之间所有满足条件的素数回文数(包括a跟b)每组数据之后空一行。
#include<iostream>
#include<cstring>
#include<cmath>
#include<string>
using namespace std;
const int N=1e8+10;
bool a[N],A;
int b[1000],ant,n,m;
void euler(int n)
{
memset(a,true,sizeof(a));
a[1]=false;
for(int i=2;i<=n;i++){
if(a[i]) b[++ant]=i;
for(int j=1;i*b[j]<=n&&j<=ant;j++){
a[i*b[j]]=false;
if(i%b[j]==0) break;
}
}
}
int hw(int n)
{
string A=to_string(n);
double l;
l=n;
int le=(int)log10(l)+1;
for(int i=0;i<=le/2;i++){
if(A[i]!=A[le-i-1])
return 0;
}
return 1;
}
int main()
{
cin>>m>>n;
euler(n);
for(int i=m;i<=n;i++){
if(a[i]&&hw(i)){
cout<<i<<endl;
}
}
return 0;
}
打完表后
再从新计入数组写一下就行