欢乐数
|
不断取一个自然数十进制表达下各位数的平方和,若最后的结果是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到200之间的欢乐数,每个数单独一行。
|
本题难度:
|
解答
|
用缓存作记忆化搜索更高效,但直接迭代计算的代码更短。
最终代码有四行。
代码长度:85字节 vs. 全站第一:62字节。
for i in range(1,201):
n=i
while n>6:n=sum(int(j)**2for j in str(n))
n<2==print(i)
|
| |