【问题描述】
因为373既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。请你写一个程序来找出范围[a,b](5 <= a < b <= 1000,0)间的所有回文质数。
输入:一行,表示区间a,b。
输出:回文质数列表,一行一个。
【样例输入】
5 300
【样例输出】
5
7
11
101
131
151
181
191
【问题描述】
因为373既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。请你写一个程序来找出范围[a,b](5 <= a < b <= 1000,0)间的所有回文质数。
输入:一行,表示区间a,b。
输出:回文质数列表,一行一个。
【样例输入】
5 300
【样例输出】
5
7
11
101
131
151
181
191
回文质数其实就是 回文数判断+质(素)数筛 两个的结合
所以下面的写法思路是先找出所有的回文数再判断它们是不是质数(素数)。
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
bool c[100000005];//bool类型 值只有0和1两种情况
//素数
void prime(int b) {
memset(c, true, sizeof(c));
c[1]=false;
int n=sqrt(b);
for (int i=2;i<=n;i++)
{
if (c[i])
{
for (int j=2;j<=b/i;j++)
c[i*j]=false;
}
}
}
//回文数判断
bool hws(int num) {
int temp=num,ans=0;
while (temp!=0)
{
ans=ans*10+temp%10;
temp/=10;
}
if (ans==num)
return true;
else
return false;
}
//主函数
int main() {
int a,b;
cin>>a>>b;
if (b>=10000000)
b=9999999;
prime(b);
if(a>b)
return 0;
for (int i=a;i<=b;i+=2) {
if (c[i] && hws(i))
cout<<i<<endl;
}
return 0;
}
运行结果如图:
以上仅供参考,如有任何疑问,可以评论回复,看到即回。
希望对题主有所帮助!可以的话,帮忙点个采纳!