Python: Square Digit Chain
Python: Square Digit Chain
ProjectEuler Problem No.92
Here we have a mathematical definition called Happy Number..
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 in base-ten, and repeat the process until the number either:
equals 1 (where it will stay), or
it loops endlessly in a cycle that does not include 1.
(Wikipedia).
In ProjectEuler the task stated in this problem as ” How many starting numbers below ten million will arrive at 89?”
Enhancement: Here we will do something else, we will try to solve the task and post the answer to the projecteuler portal, BUT we are not talking about this here, we will use the concept of this task to generate chains of looped number and I will use it later in another post (project) and trying to represent this chains in a graphic way.
So to do this we need two functions, First one will read a number, get its digits, squaring each digit and get the summation. To keep our eyes on the numbers we need to store it, so we will use list called the_chain.
To check if we have reach a closed chain then we need to ask if the new number (sum of square digit) exists in the chain list or not. If exists we finish and will return the chain for more manipulating.
I will solve this on my way .. 🙂
In this code we will do the following:
1. We will ask the user to enter a number.
2. We will run the function on that number.
3. Outputs:
If we ends with 1 then we have a Happy Number.
If we have closed chain (current number exists in the chain) then we will have tow cases:
If the current number is the same as the start number, then we will call this “Perfect Chain“. Otherwise we will call it “Tail Chain”
The Code:
# Square digit chain.
# Pprojecteuler problem No 92
num = 1
the_chain=[]
def get_square_digit_chain(n):
tot=0
the_chain.append(n)
while n != 0:
tot=0
for each in str(n):
tot= tot + int(each)**2
n = tot
if n in the_chain:
return n
else:
the_chain.append(n)
#We ask the user to enter a number.
num =int(input(“Enter a number “))
chain_closed = get_square_digit_chain(num)
if chain_closed == 1:
print(“We have a Happy Number”)
print(the_chain,’This is Open Chain’)
else:
if chain_closed == num:
print(“We have a Perfect Chain”)
print(the_chain,’Closed on’,chain_closed)
else:
print(“We have a Tail Chain”)
print(the_chain,’Closed on’,chain_closed)
![]() |