HDU 1016 Prime Ring Problem

来源:互联网 发布:中华遗产 知乎 编辑:程序博客网 时间:2024/06/06 13:14
#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;}}}