判断回文比判断素数耗时短,所以先判断回文,由于 100000000 以内的最大回文素数为 9989899,所以不必判断更大的数。
#include <cstdio>
#include <cmath>
//判断n是否为素数
bool isPrime(int n)
{
int s = (int)sqrt(n);
for (int i = 2; i <= s; i++)
{
if (n % i == 0)
return false;
}
return true;
}
//判断n是否为回文
bool isPalin(int n)
{
int palin = 0;
int temp = n;
while (temp > 0)
{
palin = palin * 10 + temp % 10;
temp /= 10;
}
if (palin == n)
return true;
else
return false;
}
int main()
{
int a, b;
while (scanf("%d%d", &a, &b) != EOF)
{
for (int i = a; i <= b && i <= 9989899; i++)
{
if ((i & 1) && isPalin(i) && isPrime(i))
printf("%d\n", i);
}
printf("\n");
}
return 0;
}
继续加油。