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,
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.
How many starting numbers below ten million will arrive at 89?
对于10000000以内的数,其各数位的平方和最大为9*9*7, 即9999999的下一位数应该为9*9*7
声明一个大小为567的bool数组,在该数最终到达89时标记为true
def nextnum(a): res=0 while a!=0: tmp=a%10 res=res+tmp*tmp a=a//10 return res res=0 num=[False for i in range(9*9*7+2)] for i in range(9*9*7+1): nextn=nextnum(i) while nextn>i and nextn!=89: nextn=nextnum(nextn) if num[nextn]==True or nextn==89: res=res+1 num[i]=True for i in range(9*9*7+1,10000000): if num[nextnum(i)]==True: res=res+1 print('res = ',res)
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-14 07:06:56