回文质数
题目描述
因为 151 151 151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 151 151是回文质数。
写一个程序来找出范围 [ a , b ] [a,b] [a,b]的所有回文质数。
输入格式
输入共 1 1 1行,两个用空格隔开的正整数 a , b a,b a,b。
输出格式
输出 a ∼ b a \sim b a∼b中的所有回文质数,每个一行。
样例 #1
样例输入 #1
5 500
样例输出 #1
5
7
11
101
131
151
181
191
313
353
373
383
提示
对于 100 % 100\% 100%的数据, 1 ≤ a ≤ b ≤ 1 0 6 1 \le a \le b \le 10^6 1≤a≤b≤106。
答案
#include <bits/stdc++.h>
using namespace std;
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 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) continue;
if (!huiwen(i)) continue;
if (prime(i)) cout << i << endl;
}
return 0;
}