素数环
输入正整数n,把整数1,2,3...n组成一个环,使得相邻两个整数之和均为素数,
输出从整数1开始逆时针的排列。同时一个环恰好只输出一次,n<=16。
输入:
6
输出:
1 4 3 2 5 6
1 6 5 2 4 3
1 #include<iostream> 2 using namespace std; 3 int A[16],vis[17]={0},n; 4 bool isp(int n) 5 { 6 if(n==1)return false; 7 int i; 8 for(i=2;i<n/2;i++)if(n%i==0)return false; 9 return true; 10 } 11 void dfs(int cur) 12 { 13 int i; 14 if(cur==n&&isp(A[0]+A[n-1])) 15 { 16 int ok=1; 17 for(i=0;i<n;i++){if(ok){cout<<A[i];ok=0;}else cout<<" "<<A[i];} 18 cout<<"\n"; 19 } 20 else for(i=2;i<=n;i++) 21 { 22 if(!vis[i]&&isp(i+A[cur-1])) 23 { 24 A[cur]=i; 25 vis[i]=1; 26 dfs(cur+1); 27 vis[i]=0; 28 } 29 } 30 } 31 int main() 32 { 33 while(cin>>n) 34 { 35 A[0]=1; 36 dfs(1); 37 } 38 return 0; 39 }