AC代码:
#include <cstdio>
int n;
int ori[25];
int vis[25];
int prime(int larg){//判断是否为素数
for(int i=2;i*i<=larg;i++){
if(larg % i == 0){
return 0;
}
}
return 1;
}
void init(){
for(int i=0;i<=n;i++){
vis[i] = 0;
}
}
void dfs(int k){
if(k == n + 1 && prime(ori[1] + ori[k-1])){
for(int i=1;i<=n-1;i++){
printf("%d ", ori[i]);
}
printf("%d\n", ori[n]);
}
else{
for(int i=2;i<=n;i++){
if(!vis[i] && prime(i + ori[k-1])){
ori[k] = i;
vis[i] = 1;
dfs(k+1);
vis[i] = 0;
}
}
}
}
int main(){
int count = 0;
while(scanf("%d", &n)!=EOF){
count ++;
init();
printf("Case %d:\n", count);
ori[0] = 0;
ori[1] = 1;
vis[1] = 1;
dfs(2);
printf("\n");
}
return 0;
}