问题:求
如何优化时间复杂度。
考虑到存在一部分连续的,满足
时,
取相同值,我们只需要把这样的
和
组合找到,时间复杂度可从O(n)降到O(logn).
算法原理:
若l是满足 的左边界,即有
则有:
同理可有,我们找到 的右边界r,应满足:
即:
根据上述分析,通俗理解为r为小于 且距离
最近的整数。
可把上述算法表示为:
Code如下:
import time
#整除分块优化算法
def div_stock_sum(n):
l=1
total=0
while l<=n:
r=n//(n//l)
total+=(r-l+1)*(n//l)
l=r+1
return total
print('start:',time.strftime('%H-%M-%S',time.localtime()))
s=div_stock_sum(4) #自行修改
print('end:',time.strftime('%H-%M-%S',time.localtime()))
print("result is :",s)