前言:

这两天有点急功近利了,压力有些过大了。人一紧张思维就会僵硬,都不会思考了,看到有hint,没经过什么精神斗争就点进去看了。压力下人真的很难取得成绩,看看下面这坨代码,我都干了什么!

题目大意:

给出两个整数a,b,输出[a,b]范围内的所有回文质数。

思路:

刚开始尝试用筛选法打素数表,但是空间不够。然后看了hint的提示,改成先生成回文数再判断是否为质数。生成回文数的方法是多重循环,方法同样来自hint循环。

代码:

/*
ID: lujunda1
LANG: C++
PROG: pprime
*/
#include<iostream>
#include<stdio.h>
#include<cmath>
using namespace std;
bool check_prime(int n)
//判断n是否为质数。 
{
	for(int i=2;i<=sqrt(double(n));i++)
		if(n%i==0)
			return false;
	return true;
}
void get_pali(int n,int m)
//输出[n,m]范围内的所有回文质数。 
{
	for(int a=5;a<10;a+=2)
	//寻找1位回文质数。 
		if(check_prime(a)&&n<=a&&a<=m)
			printf("%d\n",a);
	for(int a=1;a<10;a+=2)
	//寻找2位回文质数。 
	{
		int temp=a*10+a;
		if(check_prime(temp)&&n<=temp&&temp<=m)
		//判断回文数是否为质数与是否在规定范围内。 
			printf("%d\n",temp);
	}
	for(int a=1;a<10;a+=2)
		for(int b=0;b<10;b++)
		//寻找3位回文质数。 
		{
			int temp=a*100+b*10+a;
			if(check_prime(temp)&&n<=temp&&temp<=m)
				printf("%d\n",temp);
		}
	for(int a=1;a<10;a+=2)
		for(int b=0;b<10;b++)
		//寻找4位回文质数。 
		{
			int temp=a*1000+b*100+b*10+a;
			if(check_prime(temp)&&n<=temp&&temp<=m)
				printf("%d\n",temp);
		}
	for(int a=1;a<10;a+=2)
		for(int b=0;b<10;b++)
			for(int c=0;c<10;c++)
			//寻找5位回文质数。 
			{
				int temp=a*10000+b*1000+c*100+b*10+a;
				if(check_prime(temp)&&n<=temp&&temp<=m)
					printf("%d\n",temp);
			}
	for(int a=1;a<10;a+=2)
		for(int b=0;b<10;b++)
			for(int c=0;c<10;c++)
			//寻找6位回文质数。 
			{
				int temp=a*100000+b*10000+c*1000+c*100+b*10+a;
				if(check_prime(temp)&&n<=temp&&temp<=m)
						printf("%d\n",temp);
			}
	for(int a=1;a<10;a+=2)
		for(int b=0;b<10;b++)
			for(int c=0;c<10;c++)
				for(int d=0;d<10;d++)
				//寻找7位回文质数。 
				{
					int temp=a*1000000+b*100000+c*10000+d*1000+c*100+b*10+a;
					if(check_prime(temp)&&n<=temp&&temp<=m)
						printf("%d\n",temp);
				}
	for(int a=1;a<10;a+=2)
		for(int b=0;b<10;b++)
			for(int c=0;c<10;c++)
				for(int d=0;d<10;d++)
				//寻找8位回文质数。 
				{
					int temp=a*10000000+b*1000000+c*100000+d*10000+d*1000+c*100+b*10+a;
					if(check_prime(temp)&&n<=temp&&temp<=m)
						printf("%d\n",temp);
				}
}
int main()
{
	freopen("pprime.in","r",stdin);
	freopen("pprime.out","w",stdout);
	int a,b;
	scanf("%d%d",&a,&b);
	get_pali(a,b);
}