题目描述
因为151即是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 号是回文质数。
写一个程序来找出范围[a,b](5 <= a < b <= 100,000,000)间的所有回文质数;
输入
第 1 行: 二个整数 a 和 b
输出
输出一个回文质数的列表,一行一个。
样例输入
5 500
样例输出
5
7
11
101
131
151
181
191
313
353
373
383
参考代码
#include <stdio.h>
#include <string.h>
int huiwen(int k) //å¤æåææ°
{
int a[10],i=0,j;
while (k>0)
{
a[i]=k%10;
k/=10;
i++;
}
for (j=0; j<i; j++)
if (a[j]!=a[i-j-1])
return 0;
return 1;
}
int hwlength(int k) //计ç®åææ°çé¿åº¦
{
int a[10],i=0;
while (k>0)
{
a[i]=k%10;
k/=10;
i++;
}
return (i);
}
int prime(int k) //å¤æè´¨æ°
{
int i;
for (i=3; i*i<=k; i+=2)
if (k%i==0)
return 0;
return 1;
}
int extend(int k) //计ç®10çk次æ¹ï¼ç¨äºä¼å
{
int i,s=1;
for (i=0; i<k; i++)
s*=10;
return (s);
}
int main()
{
int a,b,i,j;
scanf("%d%d",&a,&b);
for (i=a; i<=b; i++)
{
if (i%2==0&&i!=2)
continue;
if (i%5==0&&i!=5)
continue;
if (hwlength(i)%2==0&&i!=11) //skipä¸æ´æ®µï¼å°å¾ªç¯åéæå(length+1)ä½æ°
{
i=extend(hwlength(i));
continue;
}
if (!huiwen(i))
continue;
if (prime(i))
printf("%dn",i);
}
return 0;
}
解析
暂无