• Source
    1. #include<bits/stdc++.h>
    2.  
    3. using namespace std;
    4.  
    5. bool prime[33]={0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1};
    6.  
    7. bool taken[17];
    8.  
    9. vector<int>result;
    10.  
    11. int n;
    12.  
    13. void backtracking()
    14. {
    15. int len,i;
    16.  
    17. len = result.size();
    18.  
    19. if(len==n && prime[result[0]+result[len-1]])
    20. {
    21.  
    22. printf("%d",result[0]);
    23.  
    24. for(i=1 ; i<len; i++)
    25. {
    26. printf(" %d",result[i]);
    27. }
    28.  
    29. puts("");
    30.  
    31. return;
    32. }
    33.  
    34.  
    35.  
    36. for(i=1;i<=n;i++)
    37. {
    38. if(!taken[i] && prime[i+result[len-1]])
    39. {
    40. taken[i] = 1;
    41.  
    42. result.push_back(i);
    43.  
    44. backtracking();
    45.  
    46. taken[i] = 0;
    47.  
    48. result.pop_back();
    49. }
    50. }
    51. }
    52.  
    53. int main()
    54. {
    55. int cs=0;
    56.  
    57. while(scanf("%d",&n)==1)
    58. {
    59.  
    60. if(cs)
    61. {
    62. puts("");
    63. }
    64.  
    65. printf("Case %d:\n",++cs);
    66.  
    67. result.push_back(1);
    68.  
    69. taken[1] = 1;
    70.  
    71. backtracking();
    72.  
    73. result.clear();
    74.  
    75. }
    76.  
    77. return 0;
    78. }