1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 #include<vector> 5 #include<cmath> 6 #include<set> 7 using namespace std; 8 9 int a[20]={0,1}; //a[i]=1表示i已经使用过, a[i]=0表示i尚未使用过 10 int b[20]={0,1}; //环中的数字,环中的第一个元素始终为1 11 12 set<vector<int> > ans; 13 14 bool isprimenum(int m) 15 { 16 int t = (int)(sqrt(m*1.0)); 17 for(int i=2; i<=t; i++) 18 if(m%i==0) 19 return false; 20 return true; 21 } 22 23 void primeNumCircle(int i, int n) 24 { 25 if(i>n) 26 { 27 if(isprimenum(b[1]+b[n])) 28 { 29 vector<int> ivec; 30 for(int k=1;k<=n; k++) 31 ivec.push_back(b[k]); 32 ans.insert(ivec); 33 } 34 return; 35 } 36 for(int j=2; j<=n; j++) 37 { 38 if(a[j]==0 && isprimenum(b[i-1]+j)) 39 { 40 a[j] = 1; 41 b[i] = j; 42 primeNumCircle(i+1, n); 43 a[j] = 0; 44 b[i] = 0; 45 } 46 } 47 } 48 49 int main() 50 { 51 int n; 52 int count=0; 53 while(cin>>n) 54 { 55 if(count>0) 56 cout<<endl; 57 for(int i=0; i<20; i++) 58 a[i]=b[i]=0; 59 a[1]=b[1]=1; 60 61 ans.clear(); 62 primeNumCircle(2,n); 63 64 cout<<"Case "<<++count<<":"<<endl; 65 for(set<vector<int> >::iterator it=ans.begin(); it!=ans.end(); it++) 66 { 67 vector<int> temp = *it; 68 for(unsigned i=0; i<temp.size(); i++) 69 cout<<temp[i]<<" "; 70 cout<<endl; 71 } 72 } 73 74 return 0; 75 }