回文素数
Time Limit: 2000/1000ms (Java/Others)
Problem Description:
131号是一个主回文,因为它是一个素数和一个回文(当向后读时,它是相同的数字)。编写一个程序,
计算两个提供的数字a和b (5 <= a <b <= 10 ^ 8)范围内的主回文数; a和b都被认为在范围内。
例如,范围5-120包含3个主要回文(5,7,11,101)。
Sample Output:
3
4
解题思路:这道题跟杭电hdu1431一样,链接-->题解报告:hdu 1431 素数回文,只不过这里要求输出区间回文素数的个数。
AC代码:
1 #include<bits/stdc++.h>
2 #define maxn 9999999
3 using namespace std;
4 bool isp[maxn];int a,b,num;
5 bool is_palindrome(int n){//判断回文函数
6 int sum=0,tmp=n;
7 while(tmp){sum=sum*10+tmp%10;tmp/=10;}
8 if(sum==n)return true;
9 else return false;
10 }
11 int main(){
12 memset(isp,true,sizeof(isp));
13 isp[0]=isp[1]=false;
14 for(int i=4;i<maxn;i+=2)isp[i]=false;
15 for(int i=3;i*i<maxn;i+=2){//埃氏筛法
16 if(isp[i]){
17 for(int j=i*i;j<maxn;j+=2*i)isp[j]=false;
18 }
19 }
20 while(cin>>a>>b){
21 num=0;
22 for(int i=a;i<=b;i++){
23 if(i>=maxn)break;
24 if(isp[i]&&is_palindrome(i))num++;
25 }
26 cout<<num<<endl;
27 }
28 return 0;
29 }