题来自洛谷 P1217 [USACO1.5]回文质数 Prime Palindromes
题目:题目描述
因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。
写一个程序来找出范围 [a,b] (5 \le a < b \le 100,000,000)a,b( 一亿)间的所有回文质数。
输入格式
第 1 行: 二个整数 a 和 b .
输出格式
输出一个回文质数的列表,一行一个。
输入输出样例
输入 #1 复制
5 500
输出 #1 复制
5
7
11
101
131
151
181
191
313
353
373
383
看了大佬的帖子,我才明白偶数位只有11为回文,这样我们可以缩小范围,同时偶数除了2也都不是质数,然后打表。
#include<stdio.h>
bool isprime(int n)
{
//判断数位是否是偶数和是否是质数
int i;
int x=n; int cnt=0;
while(n)
{
n/=10;
cnt++;
}
if(cnt%2==0)
return false;
for(i=2;i*i<=x;i++)
if(x%i==0) return false;
return true;
}
bool huiwen(int n)//判断是否是回文,这还是要好好想想的。。我想了很久。
{
int y=n;
int num=0;
while(y)
{
num=num*10+y%10;
y/=10;
}
if(num==n) return 1;
return 0;
}
int c[10000]={
将表隐藏一下};
int main()
{
int a,b;
int cnt=0;
scanf("%d%d",&a,&b);
for(int i=0;;i++)
{
if(i>5959) break;
if(c[i]>=a&&c[i]<=b)
printf("%d\n",c[i]);
if(c[i]>b) break;
}
}