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; }