题目描述
因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。
写一个程序来找出范围 [a,b] (5 \le a < b \le 100,000,000)[a,b](5≤a<b≤100,000,000)( 一亿)间的所有回文质数。
输入格式
第 1 行: 二个整数 a 和 b .
输出格式
输出一个回文质数的列表,一行一个。
输入输出样例
输入 #1复制
5 500
输出 #1复制
5 7 11 101 131 151 181 191 313 353 373 383
#include<iostream>
using namespace std;
int main()
{
int m, n, j, i, k = 0, flag = 0;
cin >> m >> n;
if (m <= 5 && n >= 5)
cout << "5" << endl;
if (m <= 7 && n >= 7)
cout << "7" << endl;
if (m <= 11 && n >= 11)
cout << "11" << endl;
for(int a=1;a<10;a+=2)
for (int b = 0; b < 10; b++)
{
flag = 0;
int sum = a * 100 + b * 10 + a;
if (sum < m)
continue;
if (sum > n)
return 0;
for (j = 3; j*j <= sum; j+=2)
{
if (sum % j == 0)
{
flag = 1;
break;
}
}
if (flag == 0)
cout << sum << endl;
}
for (int a = 1; a < 10; a += 2)
for (int b = 0; b < 10; b++)
for(int c=0;c<10;c++)
{
flag = 0;
int sum = a * 10000 + b * 1000 + c * 100 + b * 10 + a;
if (sum < m)
continue;
if (sum > n)
return 0;
for (j = 3; j*j <=sum; j+=2)
{
if (sum % j == 0)
{
flag = 1;
break;
}
}
if (flag == 0)
cout << sum << endl;
}
for (int a = 1; a < 10; a += 2)
for (int b = 0; b < 10; b++)
for (int c = 0; c < 10; c++)
for(int d=0;d<10;d++)
{
flag = 0;
int sum = a * 1000000 + b * 100000 +c*10000+d*1000+ c * 100 + b * 10 + a;
if (sum < m)
continue;
if (sum > n)
return 0;
for (j = 3; j*j <= sum; j+=2)
{
if (sum % j == 0)
{
flag = 1;
break;
}
}
if (flag == 0)
cout << sum << endl;
}
return 0;
}