Square digit chains : Problem 92 : Project Euler
A number chain is created by continuously adding the square of the
digits in a number to form a new number until it has been seen before.
For example,
How many starting numbers below ten million will arrive at 89?
def squareDigitChains():
squareDigitCount = 0
for i in range(1,10000000):
strnumber = ""
strnumber = str(i)
sqnumber = 0
temp = strnumber
while True:
sqnumber = 0
for j in range(len(strnumber)):
sqnumber = sqnumber + int(strnumber[j])**2
strnumber = str(sqnumber)
if sqnumber == 1 or sqnumber == 89:
break
if sqnumber == 89:
print temp
squareDigitCount = squareDigitCount + 1
print "Required Counter is:",squareDigitCount
squareDigitChains()
For example,
44 → 32 → 13 → 10 → 1 → 1
85 → 89 → 145 → 42 → 20 → 4 → 16 → 37 → 58 → 89
Therefore any chain that arrives at 1 or 89 will become stuck in an
endless loop. What is most amazing is that EVERY starting number will
eventually arrive at 1 or 89.85 → 89 → 145 → 42 → 20 → 4 → 16 → 37 → 58 → 89
How many starting numbers below ten million will arrive at 89?
Python Code
def squareDigitChains():
squareDigitCount = 0
for i in range(1,10000000):
strnumber = ""
strnumber = str(i)
sqnumber = 0
temp = strnumber
while True:
sqnumber = 0
for j in range(len(strnumber)):
sqnumber = sqnumber + int(strnumber[j])**2
strnumber = str(sqnumber)
if sqnumber == 1 or sqnumber == 89:
break
if sqnumber == 89:
print temp
squareDigitCount = squareDigitCount + 1
print "Required Counter is:",squareDigitCount
squareDigitChains()
No comments:
Post a Comment