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 }
yy_room