Problem Description
xiaoou33對既是素數又是回文的數特別感興趣。比如說151既是素數又是個回文。現在xiaoou333想要你幫助他找出某個范圍內的素數回文數,請你寫個程序找出 a 跟b 之間滿足條件的數。(5 <= a < b <= 100,000,000);
Input
這裡有許多組數據,每組包括兩組數據a跟b。
Output
對每一組數據,按從小到大輸出a,b之間所有滿足條件的素數回文數(包括a跟b)每組數據之後空一行。
Sample Input
5 500
Sample Output
5
7
11
101
131
151
181
191
313
353
373
383
說實話,不得不驚歎於別人的思想
由於int型占四個字節
為了不占空間,定義數組為bool型來處理
[cpp]
#include <stdio.h>
#include <stdio.h>
using namespace std;
bool a[9989900];
int prime[1005];
void set()
{
int i,j;
for(i = 2; i<=9989899; i+=2)
a[i] = true;
for(i = 3; i<=3161; i++)
{
if(a[i])
continue;
for(j = i+i; j<=9989899; j+=i)
a[j] = true;
}
}
int huiwen(int n)
{
int a = 0,b = n;
while(b)
{
int r = b%10;
a = a*10+r;
b/=10;
}
if(a == n)
return 1;
return 0;
}
int main()
{
int n,m,i,k = 2;
set();
prime[0] = 5;
prime[1] = 7;
for(i = 11; i<=9989899; i+=2)
{
if(!a[i] && huiwen(i))
prime[k++] = i;
}
while(~scanf("%d%d",&n,&m))
{
for(i = 0; i<k; i++)
{
if(prime[i]<n)
continue;
else if(prime[i]>m)
break;
else
printf("%d\n",prime[i]);
}
printf("\n");
}
return 0;
}