upto(n) = {my(res = List(), lv, uv, ind = 0, i = 3); while(1, t = 2*i^2; lv = t; while(oddrank(lv-1) == 1, lv--; ); if(lv > n, return(res) ); uv = t; while(oddrank(uv + 1)==1, uv++; ); for(i = lv, uv - 3, listput(res, i); ); i+=2 ); } oddrank(n) = { my(f = factor(n)); sum(i = 1, #f~, bitand(f[i,2], 1)) }