p1217回文质数,线性筛法+数论
知道前提:
除11以外的偶数位的回文数都不是质数:偶数位的回文数可以分解成n*100..(偶数个)...001,而100..(偶数个)...001可以被11整除
所以1~1e8就可以降到1~1e7(除1e7以外最多7位数)
int main(){
cin>>a>>b;
线性筛法;
for (i:a~b){
if (i满足回文数且质数)printf;
}
} bool isok( int x){
int 临时res=x, ans=0;
while (res不为0){
ans从末位一个一个读入
}
return ans==x;
} 代码 #include <iostream>
using namespace std;
const int N=10000007;
int a,b;
int cnt,prime[N];
bool st[N];
bool isok(int x){//是否是回文数
int res=x, ans=0;
while(res){
ans=ans*10+res%10;
res/=10;
}
return ans==x;
}
int main(int argc, char** argv) {
cin>>a>>b;
if(a<10000000){
b=min(b,N);
for(int i=2;i<=b;i++){
if(!st[i]) prime[cnt++]=i;
for(int j=0;prime[j]<=b/i;j++){
st[i*prime[j]]=true;
if(i%prime[j]==0) break;
}
}
}
for(int i=a;i<=b;i++){
if(i>N) break;
if(!st[i]&&isok(i)) cout<<i<<endl;
}
return 0;
}
格力公司福利 356人发布