码迷,mamicode.com
首页 > 其他好文 > 详细

P2424 约数和

时间:2018-08-16 21:37:51      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:约数和   前缀和   除法   复杂   格式   问题   计算   输入格式   floor   

P2424 约数和

题目背景
Smart最近沉迷于对约数的研究中。

题目描述
对于一个数X,函数f(X)表示X所有约数的和。例如:f(6)=1+2+3+6=12。对于一个X,Smart可以很快的算出f(X)。现在的问题是,给定两个正整数X,Y(X<Y),Smart希望尽快地算出f(X)+f(X+1)+……+f(Y)的值,你能帮助Smart算出这个值吗?

输入输出格式
输入格式:
输入文件仅一行,两个正整数X和Y(X<Y),表示需要计算f(X)+f(X+1)+……+f(Y)。

输出格式:
输出只有一行,为f(X)+f(X+1)+……+f(Y)的值。

Solution

首先利用前缀和的思想, 我们只要能求出 \(1 - n\) 的约数和的和, 就能求出一段区间的约数和的和
那么如何快速求出从 \(1\) 开始约数和的和呢
很朴素大暴力万岁!的算法是 \(O(\sqrt{n})\) 计算每个数的约数进行累加 ,然后慢到爆炸

我们可以换种思维, 考虑枚举约数
显然对于一个约数 \(d\) , 在 \(1 - n\) 中出现过 \(\lfloor \frac{n}{d}\rfloor\) 次, 所以这一约数贡献的答案为 \(\lfloor \frac{n}{d}\rfloor * d\)
所以 \(1-n\) 总答案为 \(\sum_{i = 1}^{n}\lfloor \frac{n}{i}\rfloor * i\)
这样依然需要枚举 \(1-n\)\(n\) 个因数, 达不到复杂度要求

其实看到 \(\lfloor \frac{n}{d}\rfloor\) 时我们很兴奋: 除法分块!
(之前学的除法分块是假的。。现在补个真的)

P2424 约数和

标签:约数和   前缀和   除法   复杂   格式   问题   计算   输入格式   floor   

原文地址:https://www.cnblogs.com/Tony-Double-Sky/p/9490077.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!