素数环问题

来源:互联网 发布:smt贴片机编程 编辑:程序博客网 时间:2024/06/15 16:50

素数环问题


  素数环是一个计算机程序问题,指的是将从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<stdio.h>#include <math.h>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<n;i++)printf("%3d",a[i]);printf("\n");return;}else for(i=2;i<=n;i++){if(b[i-1]==0){a[t]=i;b[i-1]=1;if(perm(a[t]+a[t-1]))dfs(t+1);b[i-1]=0;}}}int main(){int i;scanf("%d",&n);if(n%2==1){printf("no anther\n");return 0;}for(i=0;i<n;i++){a[i]=0;b[i]=0;}a[0]=1;b[0]=1;dfs(1);return 0;}



0 0
原创粉丝点击