P1217 [USACO1.5]回文质数 Prime Palindromes-C++编程解析-函数

题目1
题目2
题目3
解题思路:
题目是让我们去求一个闭区间内的回文质数,我们要求的数满足两个条件:第一个条件,是回文。即从左往右读和从右往左读是一样的。第二个条件是质数。因此,在闭区间范围内,偶数全部不满足条件。因此,我们需要处理的数据缩小为原闭区间数据个数的一半。偶数位数不存在回文质数。比如,四位的回文数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++信息学编程是重点学习内容。智慧猿少儿编程课堂一直致力于中国青少年的少儿编程普惠教育,立志做让对信息学编程感兴趣的青少儿学得起、学得懂、学得会的编程课。课程最近开始新一轮促销。最低一折起,敬请关注!
问候

发布了34 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/xingzhe_666/article/details/102516492