欢乐数(长)
* * * *
拉格朗日计划
* * * *
欢乐数(长)

不断取一个自然数十进制表达下各位数的平方和,若最后的结果是1(另一种可能是进入一个不含1的循环),就称这样的数为欢乐数。 例如19是欢乐数,相应的计算过程如下: \begin{align*} 1^2 + 9^2 =& 82, \\ 8^2 + 2^2 =& 68, \\ 6^2 + 8^2 =& 100, \\ 1^2 + 0^2 + 0^2 =& 1. \\ \end{align*} 打印1到1000之间的欢乐数,每个数单独一行。

本题难度:



解答

用缓存作记忆化搜索更高效,但直接迭代计算的代码更短。

最终代码有四行。

代码长度:86字节 vs. 全站第一:72字节。

for i in range(1,1001):
  n=i
  while n>6:n=sum(int(j)**2for j in str(n))
  n<2==print(i)