3 算法1-3 回文质数
题目描述
因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。
写一个程序来找出范围 [a,b](5≤a<b≤100,000,000)(一亿)间的所有回文质数。
输入格式
第一行输入两个正整数 a 和 b。
输出格式
输出一个回文质数的列表,一行一个。
输入输出样例
输入 #1
5 500
输出 #1
5 7 11 101 131 151 181 191 313 353 373 383
①for 遍历
②判断是否为回文数
③判断是否为质数
#include<iostream>
#include<cmath>
using namespace std;
int a, b;
bool check1(int x) //判断是否是回文数
{
int y = 0;
int x1 = x; //下面的x已经被修改
while(x)
{
y = y * 10 + x % 10;
x /= 10;
}
if(y == x1) return 1;
else return 0; //这里一定要写,不能只写1的情况 why?
}
bool check2(int x) //判断是否是质数
{
if(x < 2) return 0;
if(x == 2) return 1;
for(int i=2; i<=sqrt(x); ++i)
{
if(x % i == 0) return 0;
}
return 1;
}
int main()
{
cin>>a>>b;
//优化:除了2以外, 所有的质数都是奇数
if(a % 2 ==0) a++; //判断 a 是否为奇数,如果不是,+1变成奇数
for(int i=a; i<=b; i+=2)
{
if(check1(i) && check2(i)) printf("%d\n", i);
}
return 0;
}