这道题本来是要考验DFS的,但自己偷懒用STL写,果然TLE,明天再继续完成。
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<math.h>
using namespace std;
const int maxn=1000;
int prime(int n)
{
for(int i=2;i<=sqrt(float(n));i++)
if(n%i==0) return 0;
return 1;
}
int main(void)
{
int count=0;
int n,m;
int i,j,k;
while(cin>>n)
{
count++;
cout<<"Case "<<count<<":"<<endl;
int perm[maxn];
for(i=0;i<n-1;i++) perm[i]=i+2;
while(next_permutation(perm,perm+n-2))
{
bool flag=true;
//if(perm[0]!=1) flag=false;
for(i=0;i<n-2;i++)
{
if(!prime(perm[i]+perm[i+1])) flag=false;
}
if(!prime(perm[0]+perm[n-1])) flag=false;
if(!flag) continue;
else
{
for(j=0;j<n;j++) cout<<perm[j]<<" ";
cout<<endl;
}
}
}
}