原题
素数环(Prime Ring Problem, UVa 524)
输入正整数n,把整数1, 2, 3,…, n组成一个环,使得相邻两个整数之和均为素数。 输出
时从整数1开始逆时针排列。 同一个环应恰好输出一次。 n≤16。
样例输入:
6 样
例输出:
1 4 3 2 5 6
1 6 5 2 3 4
我的代码
#include <iostream>
#include <cstdio>
#include <math.h>
#include <cstring>
using namespace std;
int ans[20];
int n;
int used[20];
bool iss(int x)
{
int is=1;
int q;
q=floor(sqrt(x)+0.5);
for (int k=2;k<=q;k++)
{
if(x%k==0){is=0;break;}
}
if(is==1)return true;
else return false;
}
void dfs(int cur)
{
//cout<<cur<<" ";
if((cur==n)&&(iss(ans[cur-1]+ans[0])))
{
for(int k=0;k<n-1;k++)cout<<ans[k]<<",";
cout<<ans[n-1]<<"\n";
}
else for(int i=2;i<=n;i++)
{if(used[i]==1)continue;
else if(iss(ans[cur]+i)){ans[cur]=i;used[i]=1;dfs(cur+1);used[i]=0;}
}
}
int main()
{
cin>>n;
memset(used,0,sizeof(used));
ans[0]=1;
used[1]=1;
dfs(1);
system ("pause");
return 0;
}
输入6
输出
1,4,3,6,5,2
请按任意键继续. . .