以前写过的,再贴出来看看。。。
素数环问题
预处理+搜索
AC代码:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <ctype.h>
using namespace std;
int out[30],n,flag[30];
bool pr[40];
int ss=0;
void init()
{pr[2]=pr[3]=pr[5]=pr[7]=pr[11]=pr[13]=pr[17]=pr[19]=pr[23]=pr[29]=pr[31]=pr[37]=true;
}
bool prime(int a)
{for(int i=2;i*i<=a;i++)if(a%i==0)return true;return false;
}
void dfs(int x,int deep)
{int i;if(deep==n){out[deep]=x;if(!prime(out[1]+out[n])){for(i=1;i<=n;i++)if(i==n) cout<<out[i];elsecout<<out[i]<<" ";cout<<endl;}}else{out[deep]=x;flag[x]=1;for(i=1;i<=n;i++)if(flag[i]==0&&pr[i+x])dfs(i,deep+1);flag[x]=0;}
}
int main()
{memset(pr,false,sizeof(pr));init();while(cin>>n){cout<<"Case "<<++ss<<":\n";memset(flag,0,sizeof(flag));dfs(1,1);cout<<endl;}return 0;}