-
有一個整數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 }
?
?
轉載于:https://www.cnblogs.com/yyroom/archive/2013/04/18/3028222.html