我的代码如下:
#include<cstdio>
#include<cmath>
#define maxn 50
using namespace std;
bool is_prime[maxn] = {true}, vis[maxn] = {false};
int n, A[maxn];
bool is_p(int x)
{
for(int i = 2; i <= sqrt(x); i++)
if(x % i == 0)return 0;
return 1;
}
void search(int cur)
{
if(cur == n+1 && is_prime[A[n]+A[1]])
{
for(int i = 1; i <= n; i++)
printf("%d ", A[i]);
printf("\n");
}
else for(int i = 2; i <= n; i++)
{
if(is_prime[i+A[cur-1]] && !vis[i])
{
A[cur] = i;
vis[i] = 1;
search(cur+1);
vis[i] = 0;
}
}
}
int main()
{
for(int i = 2; i < 2*maxn; i++)is_prime[i] = is_p(i);
A[1] = 1, vis[1] = 1;
int p = 1;
while(scanf("%d", &n) != EOF)
{
printf("Case %d:\n", p);
search(2);
printf("\n");
p++;
}
return 0;
}
然后反馈回来的邮件说:
百度翻译;
啊这,Uva的题提交真的好麻烦