From Wikipedia, the free encyclopedia:

 A happy number is defined by the following process:
 Starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process until the number equals   1   (where it will stay),   or it loops endlessly in a cycle which does not include   1.   


 Those numbers for which this process end in   1   are       happy   numbers,   
 while   those numbers   that   do   not   end in   1   are   unhappy   numbers. 


Task

Find and print the first   8   happy numbers.

Display an example of your output here on this page.



See also

   The OEIS entry:   The     happy numbers:   A007770
   The OEIS entry:   The unhappy numbers;   A031177


 
program Happy_numbers;
 
{$APPTYPE CONSOLE}
 
uses
  System.SysUtils,
  Boost.Int;
 
type
  TIntegerDynArray = TArray<Integer>;
 
  TIntHelper = record helper for Integer
    function IsHappy: Boolean;
    procedure Next;
  end;
 
{ TIntHelper }
 
function TIntHelper.IsHappy: Boolean;
var
  cache: TIntegerDynArray;
  sum, n: integer;
begin
  n := self;
  repeat
    sum := 0;
    while n > 0 do
    begin
      sum := sum + (n mod 10) * (n mod 10);
      n := n div 10;
    end;
    if sum = 1 then
      exit(True);
 
    if cache.Has(sum) then
      exit(False);
    n := sum;
    cache.Add(sum);
  until false;
end;
 
procedure TIntHelper.Next;
begin
  inc(self);
end;
 
var
  count, n: integer;
 
begin
  n := 1;
  count := 0;
  while count < 8 do
  begin
    if n.IsHappy then
    begin
      count.Next;
      write(n, ' ');
    end;
    n.Next;
  end;
  writeln;
  readln;
end.