输入正整数n,把整数1,2,3,…,n组成一个环,使得相邻两个整数之和均为素数。输出时从整数1开始逆时针排列。同一个环应恰好输出一次。n≤16。
样例输入:
6
样例输出:
1 4 3 2 5 6
样例输入:
6
样例输出:
1 4 3 2 5 6
1 6 5 2 3 4
#include "stdio.h"
#include "malloc.h"
int compare(int a[],int t)
{
int i;
for(i=0;i<t;i++)
if(a[i]==a[t])
return 0;
return 1;
}
int depend(int n)
{
int i;
for(i=2;i<=n/2;i++)
if(n%i==0)
return 0;
return 1;
}
int backtrack(int a[],int n,int t)
{
int i,j;
if(t==n-1)
for(i=1;i<=n;i++)
{
a[t]=i;
if(depend(a[t]+a[t-1])==1 && depend(a[t]+a[0])==1 && compare(a,t)==1)
{
for(j=0;j<n;j++)
printf("%d ",a[j]);
putchar('\n');
}
}
else
{
for(i=1;i<=n;i++)
{
a[t]=i;
if(depend(a[t]+a[t-1])==1 && compare(a,t)==1)
backtrack(a,n,t+1);
}
}
return 0;
}
int main()
{
int *a;
int n,i;
int t=1;
scanf("%d",&n);
a=(int *)malloc(n*sizeof(int));
a[0]=1;
backtrack(a,n,t);
return 0;
}