int main(void) { int map[64]; int i; for(i = 0; i < 64; i++) { map[i] = transform(i); } long result = 1; int n_cycles = 0; unsigned char cycle_ind[64]; memset(cycle_ind, 0xff, sizeof(cycle_ind)); for(i = 0; i < 64; i++) { if(cycle_ind[i] != 0xff) continue; int cycle_length = 1; cycle_ind[i] = (unsigned char) n_cycles; int j = map[i]; printf("cycle %d: %2d => %2d", n_cycles, i, j); while(j != i) { cycle_length++; cycle_ind[j] = (unsigned char) n_cycles; j = map[j]; printf(" => %2d", j); } long nseq = cycle_count(cycle_length); printf(" (length is %d, %ld valid sequences)\n", cycle_length, nseq); result *= nseq; n_cycles++; } printf("result: %ld\n", result); return 0; }
int max_cycle(int i, int j) { int begin = 0; int end = 0; if (i > j) { begin = j; end = i; } else { begin = i; end = j; } int max = 0; int k = 0; for (k = begin; k < end + 1; k++) { int cycle = cycle_count(k); if (cycle > max) { max = cycle; } } return max; }