function isqrt(x)
    local q = 1
    local r = 0
    while q <= x do
        q = q << 2
    end
    while q > 1 do
        q = q >> 2
        local t = x - r - q
        r = r >> 1
        if t >= 0 then
            x = t
            r = r + q
        end
    end
    return r
end

print("Integer square root for numbers 0 to 65:")
for n=0,65 do
    io.write(isqrt(n) .. ' ')
end
print()
print()

print("Integer square roots of oddd powers of 7 from 1 to 21:")
print(" n |              7 ^ n | isqrt(7 ^ n)")
local p = 7
local n = 1
while n <= 21 do
    print(string.format("%2d |%18d |%12d", n, p, isqrt(p)))