upto(n) = { n++; my(v = vector(n), res = List(), streak = 1); for(i = 1, sqrtint(n), t = 0; forstep(j = i, 1, -1, t+=j^2; if(t <= n, v[t] = 1 , next(2) ) ) ); for(i = 1, n, if(v[i] == 1, streak++; if(streak >= 3, listput(res, i-2) ) , streak = 0 ) ); res }