poj 2034 Anti-prime Sequences

#include<iostream>
using namespace std;

bool isPrime[10002];
int prime[1000],total;
//线性筛法寻找素数
void makePrime()
{
total
=0;
memset(isPrime,
true,sizeof(isPrime));
for(int i=2;i<=maxn;i++)
{
if(isPrime[i])
prime[
++total]=i;
for(int j=1;j<=total&& i*prime[j]<=maxn; j++)
{
isPrime[i
*prime[j]]=false;
if(i%prime[j]==0)
break;
}
}
}

int arr[2000],tag[2000],res[2000];
int n,m,d,end;
void dfs(int id) //直接搜索
{
for(int i=n;i<=m;++i)
{
if(tag[i])
continue;
bool flag=1;
int j=id-1,s=i;
while(j>0&&id-j+1<=d)
{
s
+=res[j];
if(isPrime[s])
{
flag
=0;break;
}
j
--;
}
if(flag)
{
res[id]
=i;
tag[i]
=1;
if(id==m-n+1)
{
end
=1;
return;
}
dfs(id
+1);
if(end==1)
return;
tag[i]
=0;
}
}
}
int main()
{
makePrime();
while(scanf("%d%d%d",&n,&m,&d)&&n)
{
end
=0;
memset(tag,
0,sizeof(tag));
dfs(
1);
if(end)
{
for(int i=1;i<m-n+1;++i)
printf(
"%d,",res[i]);
printf(
"%d\n",res[m-n+1]);
}
else
printf(
"No anti-prime sequence exists.\n");
}
return 0;
}

  

posted on 2011-07-22 22:48  sysu_mjc  阅读(284)  评论(0编辑  收藏  举报

导航