big = 1 000 000 s = 0 S = Set([]) unseen = 1 seen(v) = if (v < big, bit test(s, v), set search(S, v)) see(v) = if (v < big, s = bit or(s, 2^v), S = set union(S, Set([v]))); while (seen(unseen), unseen++) even unseen = 2 odd unseen = 1 k = 0 compute(c) = { if (c==1, row[c] = unseen, for step (v=if ((row[c-1]+previousrow[c-1])%2==0, odd unseen, even unseen), oo, 2, if (!seen(v) && isprime(row[c-1]+v+previousrow[c-1]), print (k++ " " row[c-1]+v+previousrow[c-1]); row[c] = v; break; ); ); ); } { row = []; for (r=1, 100, previous row = row; row = vector(r); for (c=1, r, compute(c); see(row[c]); if (row[c]%2==0, while (seen(even unseen), even unseen+=2), while (seen(odd unseen), odd unseen+=2), ); ); ); } quit