题目描述
因为151即是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 号是回文质数。写一个程序来找出范围[a,b](5 <= a < b <= 100,000,000)间的所有回文质数;
输入
第 1 行: 二个整数 a 和 b .
输出
输出一个回文质数的列表,一行一个。
分析:在此题的浪费时间令我无奈。我先是用打表素数,在判断回文的方法,结果一直不能过。
后来,通过指教, 原来根本就不需要打表,我们完全可以通过,先判断回文,在素数的方法来做。虽然指教了,但是还是时间超限,在后来,通过指教,我需要用i<=sqrt(n)来进行判断。于是,我用了这一个,但不幸的是,我前期一直漏写了那个’=‘,导致一直通不过。
#include"stdio.h"
#include"math.h"
int isprime(long long n)
{
long long i;
for(i=2; i<n; i++)
if(n%i==0)
return 0;
return 1;
}
int dfs(long long n)
{
long long i,j;
i=0;
j=n;
while(n)
{
i=i*10+n%10;
n=n/10;
}
if(i==j)
return 1;
else
return 0;
}
int main()
{
long long n,i,j,k;
while(~scanf("%lld%lld",&i,&j))
{
for(i; i<=j; i++)
{
if(dfs(i))
if(isprime(i))
printf("%lld\n",i);
}
}
}