素数环问题

素数环问题


  素数环是一个计算机程序问题,指的是将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环。

  现在要求输入一个n,求n个数围成一圈有多少种素数环,规定第一个数字是1。



样例输入

6

8

样例输出

1 4 3 2 5 6

1 6 5 2 3 4


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


解:


素数环问题:
如果 n 是奇数一定不可能 
第一个数字为1已经确定,所以从第二个数字开始
要求找出所有的情况
利用全排列思想或者每个位置进行假定(此处是根据每个位置进行),找出所有可能的排列并对其进行判断
相邻的两个数相加为素数,因要求找出素数环所以还需要进行首位的相应判断


#include
#include 
int a[100];
int b[100];//当前数字是否被用过
int n;
bool perm(int m){
	for(int s=2;s<=sqrt(m);s++){
		if(m%s==0){
			return false;
		}
	}
			return true;
}
void dfs(int t){
	int i;
	if(t==n && perm(a[0]+a[n-1]) && a[n-1]!=0){
		for(i=0;i



你可能感兴趣的:(蓝桥杯,算法小练,DFS搜索,计算机算法分析与设计,回溯,dfs,算法设计与分析,蓝桥杯,素数环问题)