码迷,mamicode.com
首页 > 其他好文 > 详细

poj 2034 Anti-prime Sequences(dfs)

时间:2014-07-24 11:32:42      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:poj 2034   namespace   dfs   sizeof   printf   

//相邻的 2.3......d 之和都要不为素数
# include <algorithm>
# include <stdio.h>
using namespace std;
int num[1010],vis[1010];
int n,m,d,cot;
int flag[10010];
void init()//素数打表
{
	int i,j;
	for(i=2;i<10010;i++)
	{
		if(!flag[i])
			for(j=i*i;j<10010;j=j+i)
				flag[j]=true;
	}
	flag[1]=true;
	flag[0]=true;
}
bool judge()
{
	int sum,i,k;
	sum=num[cot-1];
	if(cot-d>=0)
		k=cot-d;
	else 
		k=0;
	for(i=cot-2;i>=k;i--)
	{
		sum=sum+num[i];
		if(!flag[sum])//为素数
			return true;
	}
	return false;
}
bool dfs()
{
	int i;
	if(cot>=2)
	{
		if(judge())
			return false;
	}
	if(cot==m-n+1)
		return true;
	for(i=n;i<=m;i++)
	{
		if(!vis[i])
		{
			num[cot++]=i;
			vis[i]=true;
			if(dfs())
				return true;
			vis[i]=false;
			cot--;
		}
	}
	return false;
}
int main()
{
	int i;		
	init();//初判断是否为素数
	while(~scanf("%d%d%d",&n,&m,&d),n+m+d)
	{
		memset(vis,0,sizeof(vis));
		memset(num,0,sizeof(num));
		cot=0;
		if(dfs())
		{
			for(i=0;i<cot;i++)
			{
				if(i==cot-1)
					printf("%d\n",num[i]);
				else
					printf("%d,",num[i]);
			}
		}
		else
			printf("No anti-prime sequence exists.\n");
	}
	return 0;
}

poj 2034 Anti-prime Sequences(dfs)

标签:poj 2034   namespace   dfs   sizeof   printf   

原文地址:http://blog.csdn.net/lp_opai/article/details/38081019

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!