26 lines
563 B
ObjectPascal
26 lines
563 B
ObjectPascal
##
|
|
function humbles: sequence of uint64;
|
|
begin
|
|
var s := hset(uint64(1));
|
|
while True do
|
|
begin
|
|
var m := s.min;
|
|
yield m;
|
|
s -= m;
|
|
foreach var k in |2, 3, 5, 7| do s += k * m;
|
|
end;
|
|
end;
|
|
|
|
println('The first 50 humble numbers are:');
|
|
foreach var n in humbles.Take(50) index i do
|
|
write(n:4, if i mod 10 = 9 then #10 else '');
|
|
|
|
println;
|
|
println('Digits Count');
|
|
for var dig := 1 to 18 do
|
|
begin
|
|
var count := humbles.SkipWhile(x -> x < 10 ** (dig - 1))
|
|
.TakeWhile(x -> x < 10 ** dig).Count;
|
|
writeln(dig:2, count:10);
|
|
end;
|