标签:ted algo scanf icon ret style anim usaco ide
因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数.写一个程序来找出范围[a,b](5<=a<b<=100,000,000)间的所有回文质数;
*Line 1: a,b
a与b之间(含)的所有回文质数
一行一个
5 500
5711101131151181191313353373383
先找回文数,再判断是不是质数。
代碼實現(codevs 38ms,洛谷 44ms):
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 int a,b,c,s; 5 int hw[300000]; 6 void find(int x){ 7 c=s=x;c/=10; 8 while(c){s*=10;s+=c%10;c/=10;} 9 if(s>b) return; 10 if(s>=a) hw[++hw[0]]=s; 11 c=s=x; 12 while(c){s*=10;s+=c%10;c/=10;} 13 if(s>b) return; 14 if(s>=a) hw[++hw[0]]=s; 15 for(int i=0;i<10;i++) find(10*x+i); 16 } 17 int main(){ 18 scanf("%d%d",&a,&b); 19 for(int i=1;i<=9;i+=2){ 20 s=i; 21 find(i); 22 } 23 sort(hw+1,hw+hw[0]+1); 24 for(int i=1;i<=hw[0];i++) 25 for(int j=2;j*j<=hw[i];){ 26 if(hw[i]%j==0) break; 27 j++; 28 if(j*j>hw[i]) printf("%d\n",hw[i]); 29 } 30 return 0; 31 }
应老师要求,稍微优化了一下(codevs 4ms):
题目来源
回文质数 USACO
原文地址:http://www.cnblogs.com/J-william/p/6160855.html