本题的题面具有误导性,事实上n不仅可以取合数,也需要取素数,当然素数只有一种分解方式。
设$n=d_0+d_1\times 10+\ldots+d_k\times 10^k$是n的十进制表示,容易看出若n不为9的倍数,则其数字根就是$n \bmod 9$,否则为其数字根为9。
用筛法找出每个数的约数表,动态规划(递推)计算
$$\text{mdrs}(n)=\max(\max_{\substack{i|n \\ i>1}}(\text{mdrs}(i)+\text{mdrs}(\frac{n}{i})),\text{mdrs}(n)),$$
即得结果$14489159$。
target=1000000
d=[[] for i in range(target)]
for n in range(2,1000):
for i in range(n*n,target,n):
d[i].append(n)
mdrs=[0]*target
def s(i):
return max(mdrs[i], i%9 if i%9>0 else 9)
for n in range(2,target):
mdrs[n]=s(n)
if d[n]:
mdrs[n]=max(max(s(i)+s(n/i) for i in d[n]),mdrs[n])
print sum(mdrs)
|