1.理解题意
素数环
题目描述
素数环:从1到n这n个数摆成一个环,要求相邻的两个数的和是一个素数。
如,n=8是,素数环为:
1 2 3 8 5 6 7 4
1 2 5 8 3 4 7 6
1 4 7 6 5 8 3 2
1 6 7 4 3 8 5 2
总数为4
输入
输入n的值(n不大于15)
输出
素数环的数量
样例输入 8
样例输出 4
题目解析:题目的本义是让我们把a[1]=1的“素数环”求出来,最后输出“素数环”的个数
算法分析:
非常明显,这是一道回溯的题目。从1开始,每个空位有20种可能,只要填进去的数合法:与前面的数不相同;与左边相邻的数的和是一个素数。第20个数还要判断和第1个数的和是否素数。
2.编写代码
//注释版
#include<bits/stdc++.h>
using namespace std;
int n,a[20],sum;
bool vis[20];
bool isprime(int x) //判断x是否是素数
{
if(x==2) return true; //2是素数
for(int i=2;i<=sqrt(x);i+