6 8
Case 1: 1 4 3 2 5 6 1 6 5 2 3 4 Case 2: 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個放進去後還要判斷與第一個之和是素數才能輸出。
#include#include #include #include using namespace std; int a[25]; int n ; int vist[25]; int cases = 1; void init() { for(int i = 0; i < 25; i ++) vist[i] = 0; a[0] = 1; vist[1] = 1; } int is_prime(int x) { for(int i = 2; i <= floor(sqrt(x)+0.5); i ++) if(x % i == 0) return 0; return 1; } void dp(int cur) { if(cur == n && is_prime(1+a[n-1])) { for(int i = 0; i < n; i ++){ if(!i)printf("%d",a[i]); else printf(" %d",a[i]); } printf("\n"); } else { for(int i = 1; i <= n; i ++) { if(!vist[i] && is_prime(i+a[cur-1])){ a[cur] = i; vist[i] = 1; dp(cur+1); vist[i] = 0; } } } } int main() { while(scanf("%d",&n)!=EOF) { printf("Case %d:\n",cases++); init(); dp(1); printf("\n"); } return 0; }