首页 > 其他 > 详细

整除分块

时间:2020-07-24 22:17:44      阅读:83      评论:0      收藏:0      [点我收藏+]

整除分块的定义:例如我们求1~n的n/i的总和,如果遍历,极其容易超时,通过打表,我们发现有很多的(n/l)~(n/r)的值是重复的,整数分块就是为了寻找这样的区间。

例如:

技术分享图片

所以我们可以将一个完全暴力的问题,转化成一个不超过O(2sqrt(n))时间复杂度的问题。

代码:

for (int l = 1, r; l <= n; l = r + 1)
{
    r = n / (n / l);
    ans += (r - l + 1) * (n / l);
}

Ps:l和r为n/i取下整后,i的最小值和最大值。


 正确性的证明:

技术分享图片

整除分块

原文:https://www.cnblogs.com/ZJNU-huyh/p/13373770.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!