素数环

试题描述
    输入正整数n,用整数1,2,3,……,n 的某种排列组成一个环,使任意相邻的两数和均为素数。你的任务是输出有多少种排列方案。
输入
一个正整数n。
输出
一个数,代表有多少种方案。
输入示例
6
输出示例
2
其他说明
n〈=16

用搜索。

 1 #include <iostream>
 2 
 3 using namespace std;
 4 int A[21],vis[21],n,t;  //A数组储存的是符合的素数环,vis判断当前数字是否访问过(visit) 
 5 
 6 bool is_prime(int n)   //判断素数标准模板
 7 {
 8     for(int i=2;i*i<=n;i++) if(n%i==0) return false;
 9     return true;
10 }
11 
12 void js(int x)
13 {
14     if(x==n && is_prime(A[0]+A[n-1])) t++;
15     for(int i=2;i<=n;i++)  //从2开始一个个判断 
16     {
17         if(vis[i]==0 && is_prime(i+A[x-1])) //如果没有被用过且与其相邻数的和是素数 
18         {
19             A[x]=i;
20             vis[i]=1;
21             js(x+1);  //开始找下一个方案 
22             vis[i]=0;  //在下一个方案中,这个位置并没有访问过,所以一定要标记回0 
23         }
24     }
25 }
26 
27 int main()
28 {
29     scanf("%d",&n);
30     A[0]=1;
31     vis[1]=1;
32     js(1);
33     printf("%d",t);
34     //system("pause");
35     return 0;
36 } 
素数环
原文地址:https://www.cnblogs.com/YXY-1211/p/5680038.html