do -- find the radicals of some integers - the radical of n is the product -- of the distinct prime factors of n, the radical of 1 is 1 local maxNumber = 1000000; -- maximum number we will consider local upfc, radical = {}, {} -- unique prime factor counts and radicals for i = 1, maxNumber do upfc[ i ] = 0 radical[ i ] = 1 end for i = 2, maxNumber do if upfc[ i ] == 0 then radical[ i ] = i upfc[ i ] = 1 for j = i + i, maxNumber, i do upfc[ j ] = upfc[ j ] + 1 radical[ j ] = radical[ j ] * i end end end -- show the radicals of the first 50 positive integers io.write( "Radicals of 1 to 50:\n" ) for i = 1, 50 do io.write( string.format( "%5d", radical[ i ] ), ( i % 10 == 0 and "\n" or "" ) ) end -- radicals of some specific numbers io.write( "\n" ) io.write( "Radical of 99999: ", radical[ 99999 ], "\n" ) io.write( "Radical of 499999: ", radical[ 499999 ], "\n" ) io.write( "Radical of 999999: ", radical[ 999999 ], "\n" ) io.write( "\n" ) -- show the distribution of the unique prime factor counts local dpfc = {} for i = 1, maxNumber do local count = dpfc[ upfc[ i ] ] dpfc[ upfc[ i ] ] = ( count == nil and 1 or count + 1 ) end io.write( "Distribution of radicals:\n" ) for i = 0, #dpfc do io.write( string.format( "%2d", i ), ": ", dpfc[ i ], "\n" ) end end