紫书UVA 524
线性筛+DFS回溯
主要是格式错误,注意最后一个数右边没有空格,最后一行后面没有空行。
#include <bits/stdc++.h>
using namespace std;
#define maxn 100
int check[maxn],prime[maxn],tot=0,vis[maxn];
int n;
void shai()
{
for(int i=2;i<maxn;i++)
{
if(!check[i])
prime[tot++]=i;
for(int j=0;j<tot;j++)
{
if(i*prime[j]>maxn)
break;
check[i*prime[j]]=1;
if(i%prime[j]==0)
break;
}
}
}
int a[maxn];
void dfs(int cur)
{
if(cur==n&&!check[a[0]+a[n-1]])
{
for(int i=0;i<n-1;i++)
{
cout<<a[i]<<" ";
}
cout<<a[n-1]<<endl;
}
else
{
for(int i=2;i<=n;i++)
{
if(!vis[i]&&!check[i+a[cur-1]])
{
a[cur]=i;
vis[i]=1;
dfs(cur+1);
vis[i]=0;
}
}
}
}
int main()
{
memset(check,0,sizeof(check));
memset(vis,0,sizeof(vis));
shai();
a[0]=1;
int cas=0;
while(cin>>n)
{
if(cas)
cout<<endl;
cout<<"Case "<<++cas<<":"<<endl;
dfs(1);
}
return 0;
}