Humble numbers are positive integers which have   no   prime factors    >    7.



Humble numbers are also called   7-smooth numbers,   and sometimes called   highly composite,

although this conflicts with another meaning of   highly composite numbers.



Another way to express the above is:

  humble  =  2i × 3j × 5k × 7m 

           where     i, j, k, m ≥ 0 



Task

   show the first   50   humble numbers   (in a horizontal list)
   show the number of humble numbers that have   x   decimal digits for all   x's   up to   n   (inclusive).
   show   (as many as feasible or reasonable for above)   on separate lines
   show all output here on this page


Related tasks

   Hamming numbers


References

   Wikipedia: Smooth numbers, see the 2nd paragraph.
   OEIS A002473: humble numbers
   University of Ulm, The first 5842 terms of humble numbers


begin % find some Humble numbers - numbers with no prime factors above 7 %
    % returns the minimum of a and b                                     %
    integer procedure min ( integer value a, b ) ; if a < b then a else b;
    % find and print Humble Numbers                                      %
    integer MAX_HUMBLE;
    MAX_HUMBLE := 2048;
    begin
        integer array H( 1 :: MAX_HUMBLE );
        integer p2, p3, p5, p7, last2, last3, last5, last7, h1, h2, h3, h4, h5, h6;
        i_w := 1; s_w := 1; % output formatting                                         %
        % 1 is the first Humble number                                                  %
        H( 1 ) := 1;
        h1     := h2    := h3    := h4    := h5 := h6 := 0;
        last2  := last3 := last5 := last7 := 1;
        p2     := 2;
        p3     := 3;
        p5     := 5;
        p7     := 7;
        for hPos := 2 until MAX_HUMBLE do begin
            integer m;
            % the next Humble number is the lowest of the next multiple of 2, 3, 5, 7  %
            m := min( min( min( p2, p3 ), p5 ), p7 );
            H( hPos ) := m;
            if m = p2 then begin
                % the Humble number was the next multiple of 2                          %
                % the next multiple of 2 will now be twice the Humble number following  %
                % the previous multple of 2                                             %
                last2 := last2 + 1;
                p2    := 2 * H( last2 )
            end if_used_power_of_2 ;
            if m = p3 then begin
                last3 := last3 + 1;
                p3    := 3 * H( last3 )
            end if_used_power_of_3 ;
            if m = p5 then begin
                last5 := last5 + 1;
                p5    := 5 * H( last5 )
            end if_used_power_of_5 ;
            if m = p7 then begin
                last7 := last7 + 1;
                p7    := 7 * H( last7 )
            end if_used_power_of_5 ;
        end for_hPos ;
        i_w := 1; s_w := 1; % output formatting %
        write( H( 1 ) );
        for hPos := 2 until 50 do writeon( H( hPos ) );
        for hPos := 1 until MAX_HUMBLE do begin
            integer m;
            m := H( hPos );
            if      m <      10 then h1 := h1 + 1
            else if m <     100 then h2 := h2 + 1
            else if m <    1000 then h3 := h3 + 1
            else if m <   10000 then h4 := h4 + 1
            else if m <  100000 then h5 := h5 + 1
            else if m < 1000000 then h6 := h6 + 1
        end for_hPos ;
        i_w := 5; s_w := 0;
        write( "there are", h1, " Humble numbers with 1 digit"  );
        write( "there are", h2, " Humble numbers with 2 digits" );
        write( "there are", h3, " Humble numbers with 3 digits" );
        write( "there are", h4, " Humble numbers with 4 digits" );
        write( "there are", h5, " Humble numbers with 5 digits" );
        write( "there are", h6, " Humble numbers with 6 digits" )
   end
end.