1.篩法打素數表,先進行預處理數組
2.進行枚舉,同時遞歸的時候標記數組,當找到最後一個數同時第一個數和最後一個數相加也是素數,進行輸出。blog
int visited[21], a[21]; bool is_prime[100]; int n; void sieve() { for (int i = 0; i <= 40; i++) is_prime[i] = true; is_prime[0] = is_prime[1] = false; for (int i = 2; i <= 40; i++) { if (is_prime[i]) { for (int j = 2 * i; j <= 40; j += i) is_prime[j] = false; } } } void dfs(int num) { if (num == n && is_prime[a[num] + a[1]]) { for (int i = 1; i < num; i++) { printf("%d ", a[i]); } printf("%d\n", a[num]); } else { for (int i = 2; i <= n; i++) { if (visited[i] == 0) { if (is_prime[a[num] + i]) { a[++num] = i; visited[i] = -1; dfs(num); visited[i] = 0; num--; } } } } } int main() { int t = 0; sieve(); while (scanf("%d", &n) != EOF) { t++; printf("Case %d:\n", t); memset(visited, 0, sizeof(visited)); memset(a, 0, sizeof(a)); a[1] = 1; dfs(1); printf("\n"); } return 0; }