:因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。
写一个程序来找出范围 [ a , b ] ( 5 ≤ a < b ≤ 100 , 000 , 000 ) [a,b] (5 \le a < b \le 100,000,000) [a,b](5≤a<b≤100,000,000) ( 一亿)间的所有回文质数。(洛谷题目)
开始是最后一个数据超时了,后来发现别人的是对区间右端点做了处理,找到了最大的回文素数
- 代码
#include<bits/stdc++.h>
using namespace std;
int isprime(int n)//判断素数与否
{
if(n == 2 || n==3)
return 1;
else if(n%6!=1 && n%6!=5)
return 0;
else
{
for(int i=5; i<sqrt(n); i++)
{
if(n%i==0 || n%(i+2)==0)
return 0;
}
}
return 1;
}
int isloop(int m)//判断是否回文
{
int m1(0), m2 = m;
while(m2!=0)
{
m1 = m2 % 10 + m1 * 10;
m2 /= 10;
}
if(m1 == m)
return 1;
return 0;
}
int main()
{
int a, b;
cin >> a >> b;
for(; a<=b && a <= 9989899; a++)//就是这里对区间右端点的限制
{
if(isloop(a)==1)
if(isprime(a)==1)
cout << a << endl;
}
return 0;
}