 /**//*
PROG: pprime
LANG: C
*/
#include<stdio.h>
#include<string.h>
#define max 1000000
char s[max];
int P[max], k = 0;
void setPrime()
  {
int i, j, a, b = max / 2;
for (i = 2; i < b; i++)
 {
if (!s[i])
 {
for (j = 2; (a = i * j) < max; j++)
 {
s[a] = 1;
}
}
}
}
void set()
  {
int i;
for (i = 2; i < 10000; i++)
 {
if (s[i] == 0)
 {
P[k++] = i;
}
}
}
int IsPrime(int n)
  {
int i, j;
for (i = 0; i < k; i++)
 {
if (n % P[i] == 0)
 {
return 0;
}
}
return 1;
}
int IsPPrime(int n)
  {
int i = 0, j;
int s1[11];
if (n < 10 || n == 11)
 {
return 1;
}
while (n)
 {
s1[i++] = n % 10 ;
n = n / 10;
}
if (i % 2 == 0)
 {
return 0;
}
for (j = 0; j < i / 2; j++)
 {
if (s1[j] != s1[i - j - 1])
 {
return 0;
}
}
return 1;
}

int main()
  {
FILE * fin = fopen("pprime.in", "r");
FILE * fout = fopen("pprime.out", "w");
int i, a, b;
fscanf( fin, "%d%d", &a, &b);
if (b > 10000000)
 {
b = 10000000;
}
setPrime();
set();
for (i = a; i <= b; i++)
 {
if (i < max)
 {
if ( s[i] == 0 && IsPPrime(i))
 {
fprintf(fout, "%d\n", i);
}
}
else
 {
//因为这里是大数,所以用IsPrime()判断每一个数会超时,判回文反而较快。
//而对于这么多大数,用基本的去合数方法,先过滤掉些较直观的合数,这样速度就出来了。
if ( i % 2 != 0 && i % 3 != 0 && i % 5 != 0&& IsPPrime(i)&&IsPrime(i) )
 {
fprintf(fout, "%d\n", i);
}
}
}
return 0;
}
|