(C)
#include <stdio.h>
int main() {
int n = 1000001; /* Highest term */
int p = 2; /* Powers of two. Test throughly if you change it. */
int r = 10; /* Base ten. Test throughly if you change it. */
char a[n];
int b, c, i, j, k, k2, l, lk, m, ok, ok2, u, d[7], f[n], g[n], v[n];
u = n;
for (j=0; j<n; j++) {
a[j] = v[j] = 0; /* corrected v[n] to v[j]. -
M. F. Hasler, Jul 05 2021*/
f[j] = g[j] = -1;
}
a[0] = 1;
for (m=0; (m<n) && u; m++) {
for (j=0; j<n; j++) if (a[j]) b = j;
for (k=0; k<n; k++) {
k2 = k;
for (j=0; k2; j++) {
d[j] = k2 % r;
k2 /= r;
}
lk = j;
if (!j) {
d[0] = 0;
lk = 1;
}
ok2 = 0;
if ((f[k] == -1) && (lk<=b+1)) {
ok2 = 0;
for (l=b-lk+1; l>-1; l--) {
ok = 1;
for (j=lk-1; j>-1; j--) if (a[l+j] != d[j]) ok = 0;
if (ok) ok2 = 1;
}
if (ok2) {
f[k] = m;
u--;
}
}
if ((g[k]==-1) && (lk<=b+1)) {
ok = 1;
for (j=lk-1; j>-1; j--) if (a[b-lk+j+1] != d[j]) ok = 0;
if (ok) g[k] = m;
}
}
c = 0;
for (j=0; j<b+2; j++) {
a[j] = a[j]*p + c;
c = 0;
if (a[j] > r-1) {
c = a[j] / r;
a[j] %= r;
}
}
}
for (i=1; i<n; i++) if (f[i] == f[i-1]) printf("%d\n", i);
return(0);
}
(PARI) uptoQdigits(n) = {v = vector(10^n); p = 1/2; todo = 10^n; my(res = List());
for(i = 1, oo, p<<=1; process(p, n); if(todo <= 0, break)); for(i = 1, #v - 1,
if(v[i] == v[i+1], listput(res, i))); res}
process(p, n) = {my(dp = digits(p), vd, lp = logint(p, 2)); qdp = #dp; my(t = min(n, qdp)); for(qd = 1, t, for(j = 1, qdp - qd + 1, vd = fromdigits(vector(qd, i, dp[j+i-1])); if(v[vd + 1] == 0, v[vd + 1] = lp; todo--)))} \\
David A. Corneth, Dec 31 2018