do -- Rare numbers - translation of EasyLang with the MOD 1089/121 test from FreeBASIC local function rev( n ) local h, r = n, 0 while h > 0 do r = r * 10 + h % 10 h = math.floor( h / 10 ) end return r end local function issqr( n ) local h = math.sqrt( n ) return math.floor( h ) == h end local po, oddDigits, lim, a, count, n = 1, true, 1, 0, 0, 0 while count < 5 do n = n + 1 if n == lim then a = a + 2 if a == 10 then a = 2 po = po * 10 oddDigits = not oddDigits end n = a * po lim = n + po end local q = n % 10 if a ~= 2 or q == 2 then if a ~= 4 or q == 0 then if a ~= 6 or q == 0 or q == 5 then local s9 = ( n % 9 * 2 ) % 9 if s9 <= 1 or s9 == 4 or s9 == 7 then if q ~= 1 and q ~= 4 and q ~= 6 and q ~= 9 then local h = a - q if h <= 1 or h >= 4 and h <= 6 then local nrev = rev( n ) if n > nrev then local s, d = n + nrev, n - nrev if ( oddDigits and d % 1089 == 0 or s % 121 == 0 ) then if issqr( s ) then if issqr( d ) then io.write( " "..n ) count = count + 1 end end end end end end end end end end end end