素数环

输入正整数n,把整数1,2,3,……,n组成一个环,使得相邻的两个整数之和均为素数,输出时从整数1开始逆时针排序。同一个环应该恰好输出一次。n<=16.

输入

一个数n

输出

不确定行数,每行都为一种不相同的素数环的可能

样例输入

6

样例输出

1 4 3 2 5 6
1 6 5 2 3 4

woc好难啊

#include <bits/stdc++.h>
using namespace std;
int n,a[1001];
bool v[1001];
bool panduan(int x)
{
	if(x<2) return 0;
	int t=sqrt(x);
	for(int i=2;i<=t;i++)
	{
		if(x%i==0) return false;
	}
	return true;
}
void dfs(int now)//和k一样
{
	if(now==n+1)
	{
		if(panduan(a[1]+a[n])==true)
		{
			for(int i=1;i<=n;i++)
			{
				cout << a[i] << ' ';
			}
		}
		cout << "\n";
		return;
	}
	for(int i=2;i<=n;i++)
	{
		if(v[i]==false&&panduan(a[now-1]+i)==true)
		{
			v[i]=true;
			a[now]=i;
			dfs(now+1);
			v[i]=false;
			a[now]=0;
		}
	}
}
int main()
{
	cin >> n;
	for(int i=1;i<=n;i++)
	{
		a[i]=i;
	}
	dfs(2);
	return 0;
}
posted @ 2023-03-07 20:09  Momo·Trace  阅读(69)  评论(0编辑  收藏  举报