解题思路:
题目是让我们去求一个闭区间内的回文质数,我们要求的数满足两个条件:第一个条件,是回文。即从左往右读和从右往左读是一样的。第二个条件是质数。因此,在闭区间范围内,偶数全部不满足条件。因此,我们需要处理的数据缩小为原闭区间数据个数的一半。偶数位数不存在回文质数。比如,四位的回文数xyyx=1000x+100y+10y+x=1001x+110y,通过分析,该数一定能被11整除,其他同理可证。这样,又排除了许多的数据。在剩余数据当中,我们对每个数依次进行回文条件和质数条件的判断,即可。*
参考程序:
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
//质数判断
bool isPrime(int num){
for(int i = 2;i <= sqrt(num);i++)
if(num%i == 0)
return false;
return true;
}
//回文判断
bool tract(int num){
int newNum = 0;
int temp = num;
while(temp){
newNum = temp%10 + newNum * 10;
temp /= 10;
}
if(newNum == num)
return true;
return false;
}
int main(){
int a,b;
cin>>a>>b;
for(int i = a;i <= b;i++){
//过滤偶数
if(i % 2 == 0)
continue;
//注意:4位、6位、8位都不存在回文数,直接过滤
if((i>1000&&i<10000)||(i>100000&&i<1000000)||(i>10000000&&i<100000000))
continue;
//回文判断
if(!tract(i))
continue;
//质数判断
if(!isPrime(i))
continue;
cout<<i<<endl;
}
return 0;
}
程序运行结果:
随着全面人工智能时代的到来,少儿编程已是大势所趋,C++信息学编程是重点学习内容。智慧猿少儿编程课堂一直致力于中国青少年的少儿编程普惠教育,立志做让对信息学编程感兴趣的青少儿学得起、学得懂、学得会的编程课。课程最近开始新一轮促销。最低一折起,敬请关注!