2777 - 素数环
一个大小为N(N<=17)的质数环是由1到N共N个自然数组成的一个数环,数环上每两个相邻的数字之和为质数。如下图是一个大小为6的质数环。为了方便描述,规定数环上的第一个数字总是1。如下图可用1 4 3 2 5 6来描述。若两个质数环,数字排列顺序相同则视为本质相同。现在要求你求出所有本质不同的数环。
Input
输入1行:一个正整数N,表示质数环的大小。
Output
输出多行:每一行描述一个数环,如果有多组解,按照字典序从小到大输出,如果无解则不输出。
Examples
Input
6
Output
1 4 3 2 5 6 1 6 5 2 3 4
Solution C++
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> using namespace std; int b[20]={0},a[20],sum=0; int i,m,n,j,k; int pd (int m) { int i; for (i=2;i<=floor(sqrt(m));++i) if (m%i==0) return 0; return 1; } int pl (int s) { int i,j; for (i=2;i<=n;++i) if ((b[i]==0)&&(pd(i+a[s-1])==1)) { a[s]=i; b[i]=1; if (s==n) { if (pd(a[20]+a[1])==1) { sum+=1;if (sum>1) cout<<endl; for (j=1;j<=n;++j) if (j==1) cout<<a[j]; else cout<<" "<<a[j]; } } else pl(s+1); b[i]=0; } } int main () { cin>>n; a[1]=1; pl(2); return 0; }