#include<stdio.h>
#include<string.h>
const int maxn = 1e5;
int mp[maxn];
int vis[maxn];
int ans[maxn];
int prime[maxn],res;
bool isn_prime [maxn];
void get_prime (int n);
int n;
void dfs(int k){
if (k == n + 1){
if (!isn_prime[ans[1] + ans[n]]){
printf("%d",ans[1]);
for (int i = 2; i <= n; i++){
printf(" %d",ans[i]);
}
printf("\n");
}
return;
}
for (int i = 2; i <= n; i++){
if (vis[i]) continue;
if (isn_prime[i + ans[k-1]]) continue;
vis[i] = 1;
ans[k] = i;
dfs(k+1);
vis[i] = 0;
}
}
int main (){
int cas = 0;
get_prime(maxn - 1);
ans[1] = 1;
while (scanf("%d", &n) != EOF){
cas++;
printf("Case %d:\n",cas);
memset(vis,0,sizeof(vis));
vis[1] = 1;
dfs(2);
printf("\n");
}
}
void get_prime (int n){
res = 0;
memset(isn_prime,0,sizeof(isn_prime));
isn_prime[0] = isn_prime[1] = 1;
for (int i = 2; i <= n; i++){
if (!isn_prime[i]){
prime[res++] = i;
for (int j = 2; j*i <= n; j++) isn_prime[j*i] = 1;
}
}
}
HDU 1016 Prime Ring Problem
最新推荐文章于 2021-06-01 18:39:59 发布