首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >整除分块思想

整除分块思想

作者头像
_DIY
发布2019-08-23 19:17:23
发布2019-08-23 19:17:23
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

概述

对于求形如 \(\sum_{i=1}^{n}\lfloor\frac{n}{i}\rfloor\) 的值,就需要用到整除分块,否则当n很大时就会超时。在普通的一个一个的计算时可以发现很多\(\lfloor\frac{n}{i}\rfloor\)的值成块状分布,最终的到的规律是发现对于每一个值相同的块,它的最后一个数就是n/(n/i)

代码

代码语言:javascript
代码运行次数:0
运行
复制
for(int l=1,r;l<=n;l=r+1)
{
    r=n/(n/l);
    ans+=(r-l+1)*(n/l);
}

相关练习

H(n) UVA - 11526

附AC代码:

代码语言:javascript
代码运行次数:0
运行
复制
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int T;
LL n;
LL H(int a)
{
    LL ans = 0;
    for(LL l = 1, r; l <= a; l = r + 1)
    {
        r = a / (a / l);
        ans += (r - l + 1)*(n / l);
    }
    return ans;
}
int main()
{
    std::ios::sync_with_stdio(false);
    // freopen("in.txt", "r", stdin);
    // freopen("out.txt", "w", stdout);
    cin >> T;
    while(T--)
    {
        cin >> n;
        cout << H(n) << endl;
    }

}

参考博客:https://cnblogs.com/peng-ym/p/8661118.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 代码
  • 相关练习
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档