program HappyNumbersProgram;
{
A happy number is a number that eventually reaches 1
when repeatedly replaced by the sum of the squares of its digits.
19 = 1^2 + 9^2 = 82
19 -> 82 -> 68 -> 100 -> 1 eventually reaches 1
19 = happy number
}
{ Compute the sum of squares of digits of n }
function SumOfDigitSquares(n : integer) : integer;
var
sum, d : integer;
begin
sum := 0;
while n > 0 do
begin
d := n mod 10;
sum := sum + d * d;
n := n div 10;
end;
SumOfDigitSquares := sum;
end;
{ Determine whether n is a happy number }
function IsHappy(n : integer) : boolean;
var
seen : array[1..1000] of integer;
count, i : integer;
repeated : boolean;
begin
count := 0;
while n <> 1 do
begin
{ check if we've seen n before }
repeated := false;
for i := 1 to count do
if seen[i] = n then
begin
repeated := true;
break;
end;
if repeated then
begin
IsHappy := false; { cycle detected → not happy }
exit;
end;
{ record n }
if count < 1000 then
begin
count := count + 1;
seen[count] := n;
end;
n := SumOfDigitSquares(n);
end;
IsHappy := true; { n = 1 → happy }
end;
var
a, b, i : integer;
happyNumbers : array[1..200] of integer;
size : integer;
begin
a := 1;
b := 100;
if a > b then
begin
i := a;
a := b;
b := i;
end;
size := 0;
for i := a to b do
if IsHappy(i) then
begin
size := size + 1;
happyNumbers[size] := i;
end;
writeln('Happy numbers in range [', a, ', ', b, ']:');
for i := 1 to size do
write(happyNumbers[i], ' ');
end.
{
run:
Happy numbers in range [1, 100]:
1 7 10 13 19 23 28 31 32 44 49 68 70 79 82 86 91 94 97 100
}