问题 H: 素数环
内存限制:128 MB时间限制:1.000 S
评测方式:文本比较命题人:20134206026
提交:720解决:276
题目描述
输入正整数n,把整数1,2,3,.....n组成一个环,使得相邻两个整数之和均为素数。输出时从整数1开始逆时针排列。同一个环应恰好只输出一次。n<=16
输入
输入一个正整数n(n<=16)
输出
分别输出每种满足条件的序列
样例输入 复制
6
样例输出 复制
1 4 3 2 5 6
1 6 5 2 3 4
提示
第一个数是1,这是确定的哦
hope工作室提供技术支持
就是比较简单且经典的dfs,大家且看着玩吧,刚打完比赛的我安详离世中
em因为是很久之前写的了,所以我是直接copy了一份,看的可能不太方便,将就将就吧
#include<stdio.h>
#include<math.h>
int su(int m)
{
for(int i=2;i<m;i++)
{
if(m%i==0)
return 1;
}
return 0;//素数
}
int n,a[25],f[25]={0},flag=0;
void pt(int k)
{
for(int i=1;i<k;i++)
{
printf("%d ",a[i]);
}
printf("\n");
// flag=1;
return ;
}
void dfs(int k)
{
if(k==n+1)
{
if(su(a[1]+a[n])==0)
{
pt(k);
flag=1;
}
}
else
{
for(int i=1;i<=n;i++)
{
int x=i+a[k-1];
if(su(x)==0&&f[i]==0)
{
a[k]=i;
f[i]=1;
dfs(k+1);
f[i]=0;//因为不止一种情况,所以要取消标记
}
}
}
}
int main()
{
scanf("%d",&n);
a[1]=1;
f[1]=1;
dfs(2);
// if(flag==0)
// printf("no answer");
}