1031 质数环

    xiaoxiao2021-03-25  95

    题目描述 Description

    一个大小为N(N<=17)的质数环是由1到N共N个自然数组成的一个数环,数环上每两个相邻的数字之和为质数。如下图是一个大小为6的质数环。为了方便描述,规定数环上的第一个数字总是1。如下图可用1 4 3 2 5 6来描述。若两个质数环,数字排列顺序相同则视为本质相同。现在要求你求出所有本质不同的数环。

    输入描述 Input Description

    只有一个数N,表示需求的质数环的大小。如:

    输出描述 Output Description

    每一行描述一个数环,如果有多组解,按照字典序从小到大输出。如:

    样例输入 Sample Input

    6

    样例输出 Sample Output

    1 4 3 2 5 6

    1 6 5 2 3 4

    数据范围及提示 Data Size & Hint

    n<=17

    #include <iostream> #include <cstdio> using namespace std; int map[100]={1}; int vis[100]={0}; int su[100]={0,2,3,5,7,11,13,17,19,23,29,31,37}; int sp[100]={0}; int n; void pri() { int i; for(i=0;i<n;i++) { printf("%d ",map[i]); } printf("\n"); } void fun(int x,int ss) { if(ss>=2) { if(sp[map[x-1]+map[x-2]]==0) return ; } if(x>=n) { if(!sp[map[n-1]+map[0]]) { return ; } pri(); return ; } int i; for(i=1;i<n;i++) { if(vis[i]==0) { vis[i]=1; map[x]=i+1; fun(x+1,ss+1); vis[i]=0; } } } int main() { int i,j; for(i=1;i<13;i++) { sp[su[i]]=1; } scanf("%d", &n); fun(1,1); }

    转载请注明原文地址: https://ju.6miu.com/read-26529.html

    最新回复(0)