Problem Descriptiona Ring is compose of n circles as shown in diagram. Put Natural number 1, 2, ..., n into each circle separately, and the sum of numbers in the adjacent circles should is a PR Ime.
Note:the number of first circle should always be 1.
INPUTN (0 < n < 20).
Outputthe output format is shown as sample below. Each row represents a series of circle numbers in the ring beginning from 1 clockwisely and anticlockwisely. The order of numbers must satisfy the above requirements. Print Solutions in lexicographical order.
You is to write a program, that completes above process.
Print a blank line after each case.
Sample Input
68
Sample Output
Case 1:1 4 3 2 5 a 6 5 2 3 4Case 2:1 2 3 8 5 6 7 41 2 5 8 3 4 7 61 4 7 6 5 8 3 21 6 7 4 3 8 5 2
#include <stdio.h> #include <string.h>int vis[30],a[30];int isprime (int x)//prime number determination {for (int i=2;i*i<=x;++ i) {if (x%i==0) return 0;} return 1;} void DFS (int n,int c) {if (c==n)//When the n adjacent primes are found {if (IsPrime (a[n]+1))//Determines whether the first is satisfied with the sum of prime numbers {printf ("1"); for (int i=2;i<=n;+ +i) printf ("%d", A[i]);p rintf ("\ n");} return;} for (int i=2;i<=n;++i) {if (!vis[i]&&isprime (a[c]+i))//One find, find I assign I to a[c],c for the number found now {a[c+1]=i;vis[i]=1;d FS (n,c+1); vis[i]=0;}}} int main () {int n,num=0;while (~scanf ("%d", &n)) {//printf ("%d", IsPrime (n)), memset (vis,0,sizeof (VIS));p rintf (" Case%d:\n ", ++num); Vis[1]=1;a[1]=1;dfs (n,1);p rintf (" \ n ");} return 0;}
Copyright NOTICE: This article for Bo Master original article, without Bo Master permission not reproduced.
Prime Ring problem HDU Hangzhou Electric 1016