/* This is a deliberately badly written and documented program. * To be modified and made readable as a tech writing exercise. */ #include #define M (45) #define bool char int s[M]; bool u[M+1]; bool q[2*M+1]; void st(int N) { int i; int j; for (i=0; i<=N; i++) u[i] = 0; for (i=0; i<=2*N; i++) q[i] = 0; for (j=0; j*j<=2*N; j++) q[j*j]=1; } bool c(int i, int N) { int j; int o; if (i==N) return 1; o = i==0? 0: s[i-1]; for (j=1; j<=N; j++) { if (u[j]) continue; if (!q[j+o]) continue; u[j] = 1; s[i] = j; if (c(i+1, N)) return 1; u[j]=0; } return 0; } p(int N) { int i; st(N); if (c(0,N)) { printf("For %d, sequence found:",N); for (i=0; i