|
发表于 2020-7-15 20:32:31
|
显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-7-15 22:27 编辑
- def getDigitalRoot(n):
- if n < 10: return n
- r = 0
- while n >= 10:
- r += n%10
- n //= 10
- r += n
- return getDigitalRoot(r)
- #maximum Digital Root Sum
- mdrs1M = [getDigitalRoot(x) for x in range(0,10**6+1)] #2-4s
- mdrs1M[10] = 7 # 10=2*5,2+5=7 =>now [1..10] is correct
- x = 10
- while True: #求[x+1, 2*x]:
- m = min(10**6, 2*x)
- # print(x+1,"-",2*x," i=[2 -", int(m**0.5),"]")
- for i in range(2, int(m**0.5)+1):
- # if x <=20: print("i=",i,"j=",max(i,(x+1)//i), (m//i))
- for j in range(max(i,(x+1)//i), (m//i)+1):
- mdrs1M[i*j] = max(mdrs1M[i*j], mdrs1M[i] + mdrs1M[j])
- x *= 2
- if m == 1000000:
- break
- print("1000=",mdrs1M[1000])
- print("24=",mdrs1M[24])
- # 1 < n <1000,000
- print(sum(mdrs1M[2:1000000])) #14489159
复制代码 |
评分
-
查看全部评分
|