题目链接:http://acm.ocrosoft.com/problem.php?cid=1172&pid=44
题目描述
素数环:从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
输出
素数环的数量
样例输入
8
样例输出
4
#include<bits/stdc++.h> using namespace std; int n; int ans=0; bool vis[111]; bool isprime(int x){ for(int i=2;i<x;i++){ if(x%i==0){ return 0; } } return 1; } void dfs(int x,int ss){ if(ss>=n&&isprime(x+1)){ ans++; } else if(ss>=n){ return; } else{ for(int i=1;i<=n;i++){ if(vis[i]==0&&isprime(x+i)){ vis[i]=1; dfs(i,ss+1); vis[i]=0; } } } } int main(){ cin>>n; vis[1]=1; dfs(1,1); cout<<ans<<endl; return 0; }