若数列$a_1,\ldots, a_r$严格递增, 满足$a_1=1$、 $a_i=a_j+a_k$ ($i>j\ge k$),且$a_1+\ldots+a_r=k$,那么$a_1,\ldots, a_r$就对应了一种分治策略,这样的数列称为k的加法链(addition chain of k)。
根据题意,对每个给定的k,需要找到最小的r,该值已在OEIS A003313中给出,前10万个k所对应的最短r在该文件中,结果是$1582$。
d=[]
with open("122_chain.txt") as f:
for line in f:
d.append(int(line.split()[1]))
print sum(d[:200])
|