1002. Anti-prime Sequences

来源:互联网 发布:java log4j 编辑:程序博客网 时间:2024/05/16 09:12
/*
 * =====================================================================================
 *
 *       Filename:  1002.cpp
 *
 *    Description:  
 *
 *        Version:  1.0
 *        Created:  2012年09月11日 11时00分38秒
 *       Revision:  none
 *       Compiler:  gcc
 *
 *         Author:  YOUR NAME (), 
 *        Company:  
 *
 * =====================================================================================
 */
#include<iostream>
#include<stdio.h>
#include<memory.h>
using namespace std;
int prime[10001];
int stack[1001];
int visited[1001];


int b;
int e;
int d;


bool isComplete;
//judge whether 
bool isValid(int v,int deep)
{
int sum = v;
for( int i= deep-1; i>=0 && i >= deep-d+1  ; i-- )
{
sum += stack[i];
if( prime[sum] == 0 )
{
return false;
}
}
return true;
}
void dfs(int deep)
{
if( isComplete == false )
{
if( deep >= e-b+1 )
{
isComplete = true;
//printf the result
printf("%d",stack[0]);
for( int i = 1; i <= e-b ; i++ )
{
printf(",%d",stack[i]);
}
printf("\n");


}
else
{
for( int i = b; i <= e  ; i++ )
{
if( visited[i] == 0 && isValid(i,deep))
{
//push into the stack
stack[deep] = i;
//set visited
visited[i] = 1;
dfs(deep+1);
//unset visited
visited[i] = 0;
}
}
}
}
}
int main(int argc, char *argv[])
{
//set the flag into zero
//find the prime arange from 1 to 10000
memset(prime,0,sizeof(int));
for( int i = 2; i <= 100 ; i++ )
{
for( int j = 2; i*j <= 10000 ; j++ )
{
prime[i*j] = 1;
}


}
while( scanf("%d%d%d",&b,&e,&d) &&(b+e+d)!=0)
{
memset(visited,0,sizeof(int));
isComplete = false;
dfs(0);
if( isComplete == false )
{
printf("No anti-prime sequence exists.\n");
}
}
return 0;
}
原创粉丝点击