nyist 488 素数环

有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环。

为了简便起见,我们规定每个素数环都从1开始。例如,下图就是6的一个素数环。

这题在进行判断时,发现在大于3的素数都没有环,所以判断一下这个条件,其他的就是按照题目意思进行输出。

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <math.h>
 4 
 5 int n;
 6 int a[25];
 7 int b[25];
 8 int flag = 1;
 9 
10 bool prime(int x)
11 {
12     int f = 1;
13     int i;
14     for(i = 2; i <= sqrt(x) ;i++)
15       if(x % i == 0)
16       {
17           f = 0;
18           break;
19       }
20       return f;
21 }
22 
23 void judge(int t)
24 {
25     if(t == n && prime(a[t-1]+a[0]) )
26     {
27         flag = 0;
28         int i;
29         for(i = 0; i < n; i++)
30           printf("%d ",a[i]);
31           printf("\n");
32     }
33     else
34     {
35         int j;
36         for(j = 2; j <= n; j++)
37           if(!b[j] && prime(j + a[t-1] ) )
38           {
39               b[j] = 1;
40               a[t] = j;
41               judge(t+1);
42               b[j] = 0;
43           }
44     }
45 }
46 
47 int main()
48 {
49     int k = 1;
50   while(scanf("%d",&n) && n)
51   {
52       memset(a,0,sizeof(a));
53       memset(b,0,sizeof(b));
54       a[0] = 1;
55       flag = 1;
56       printf("Case %d:\n",k++);
57       if(n >= 3 && prime(n) )
58        goto loop;
59       judge(1);
60     loop:
61       if(flag)
62        printf("No Answer\n");
63   }
64   return 0;
65 }

 

 

posted @ 2013-04-18 13:17  heity  阅读(210)  评论(0编辑  收藏  举报