hdu 1431 素数回文

素数回文

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 17512    Accepted Submission(s): 4033


 

Problem Description

xiaoou33对既是素数又是回文的数特别感兴趣。比如说151既是素数又是个回文。现在xiaoou333想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a 跟b 之间满足条件的数。(5 <= a < b <= 100,000,000); 

 

 

Input

这里有许多组数据,每组包括两组数据a跟b。

 

 

Output

对每一组数据,按从小到大输出a,b之间所有满足条件的素数回文数(包括a跟b)每组数据之后空一行。

 

 

Sample Input

 

5 500

 

 

Sample Output

 

5 7 11 101 131 151 181 191 313 353 373 383

 

 

Author

xiaoou333

 

 

Source

zjut

怎么说呢  先把素数表打出来 在把答案表打出来 对空间没有把握可以把1到1e8的回文打出来然后定个空间 

看到有的大佬直接把素数表打出来再把回文表打出来再重定向输出答案表 再建个新的代码把表丢进去然后交题

以下是蒟蒻的常规方法

#include<iostream>
#include<cstring>
#include<algorithm>
#define maxn 9989899+1
using namespace std;

bool isprime[maxn];
int s[980];

void eprime()//素数打表 
{
	memset(isprime,true,sizeof(isprime));
	for(int i=2;i<maxn;i++)
	if(isprime[i])
	{
		for(int j=i+i;j<maxn;j+=i)
		isprime[j]=false;
	}
} 

int isneko(int n)//判断回文  
{
	int p=n,sum=0;
	while(n)
	{
		sum=sum*10+n%10;
		n/=10;
	}
	return sum==p;
}

int main()
{
	int a,b,num=0;
	eprime();
	for(int i=1;i<maxn;i++)
	{
		if(isprime[i]&&isneko(i))
		s[num++]=i;//答案打表 
	} 
	//sort(s,s+num);
	while(cin>>a>>b)
	{
		for(int i=0;i<num;i++)
		{
			if(s[i]<a) continue;
			else if(s[i]>b) break;
			else cout<<s[i]<<endl;
		}
		cout<<endl;
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值