upto(n) = {my(l = List(), res = vector(10)); res[1] = 8; for(e = 3, logint(n, 2), for(k = 2, sqrtnint(n, e), listput(l, k^e) ) ); l = Set(l); for(i = 2, #l, c = squaresbetween(l[i-1], l[i]); if(c > #res, res = concat(res, vector(c - #res)); ); if(c > 0 && res[c] == 0, res[c] = l[i] ) ); res } squaresbetween(k, m) = { sqrtint(m) - ceil(sqrt(k)) + 1 - issquare(m) - issquare(k) }