我觉得一点问题都没有啊
nm=int(input())
list1=[0 for x in range(nm)]
shuz=[]
dic={}
dic2={}
for x in reversed(range(nm)):
num=0
for y in reversed(range(1,x)):
if x%y==0:
if y in dic2.keys():
num+=dic2[y]
break
num+=y
dic2[x]=num
list1[x]=num
def sb(xb,rl):
if (xb,rl) in dic.keys():
return dic[(xb,rl)]
if xb<0:
return 0
if xb>rl:
return sb(xb-1,rl)
k=max(sb(xb-1,rl),sb(xb-1,rl-xb)+list1[xb])
dic[(xb,rl)]=k
return k
print(sb(nm-1,nm))