最近中考放假几天都在怼一道BJOI2018的水题,但卡死在90pts跑不动啊!

然后今天发现终于过了然而Hack的数据全RE了然后就开始找新的题目来找回信心。

然后发现智能推荐里有这道题,然后想了1min才想到CQOI到底是哪里的原来是重庆呵

其实还是一道比较好的除法分块入门题。动一下脑子就可以做了。

我们先观察一下最基础的式子:

\(\sum_{i=1}^n k\ mod\ i\)

然后我们利用取余的基本性质,即\(k\ mod\ i=k-i\lfloor\frac{k}{i}\rfloor\),把原式化为:

\(\sum_{i=1}^n k-i\lfloor\frac{k}{i}\rfloor\),然后把k提取出来,即有\(nk-\sum_{i=1}^n i\lfloor\frac{k}{i}\rfloor\)

然后我们考虑如何求解\(\sum_{i=1}^n i\lfloor\frac{k}{i}\rfloor\),而求它的关键就在于这个\(\lfloor\frac{k}{i}\rfloor\)

我们令\(t=\lfloor\frac{k}{i}\rfloor\),然后我们通过样例\(k=5\)的情况来观察一下规律:

\(i\) \(1\) \(2\) \(3\) \(4\) \(5\) \(6\) \(7\) \(8\) \(9\) \(10\)
\(t\) \(5\) \(2\) \(1\) \(1\) \(1\) \(0\) \(0\) \(0\) \(0\) \(0\)

手玩找规律一下可以发现一个显然的性质所有的\(t\)都是连续的一段

然后我们考虑把所有相同的\(t\)都一起计算,这样我们可以估计它的复杂度大约为\(O(\sqrt n)\)

然后我们令我们当前处理的区间左端为\(l\),然后我们想一下如何推出\(r\)然后我们继续手玩发现

  • 当\(t=0\)时,\(r=n\)
  • 当\(t\ne 0\)时,\(r=min(n,\lfloor\frac{k}{t}\rfloor)\)

然后这样我们下一次操作只要使\(l=r+1\)即可

然后对于每一块内,我们计算它们的和:

\(sum=\frac{t\cdot (r-l+1)\cdot (l+r)}{2}\)

然后我们就做下去即可附上超级精简CODE

#include<cstdio>
using namespace std;
long long n,k,t,ans,l,r;
inline int min(int a,int b)
{
return a<b?a:b;
}
int main()
{
scanf("%lld%lld",&n,&k); ans=n*k;
for (l=1;l<=n;l=r+1)
t=k/l,r=t?min(n,k/t):n,ans-=t*(r-l+1)*(l+r)>>1;
printf("%lld",ans);
}

Luogu P2261 [CQOI2007]余数求和的更多相关文章

  1. [Luogu P2261] [CQOI2007]余数求和 (取模计算)

    题面 传送门:https://www.luogu.org/problemnew/show/P2261 Solution 这题显然有一个O(n)的直接计算法,60分到手. 接下来我们就可以拿出草稿纸推一 ...

  2. LUOGU P2261 [CQOI2007]余数求和(数论分块)

    传送门 解题思路 数论分块,首先将 \(k\%a\) 变成 \(k-a*\left\lfloor\dfrac{k}{a}\right\rfloor\)形式,那么\(\sum\limits_{i=1}^ ...

  3. 洛谷 P2261 [CQOI2007]余数求和 解题报告

    P2261 [CQOI2007]余数求和 题意: 求\(G(n,k)=\sum_{i=1}^n k \ mod \ i\) 数据范围: \(1 \le n,k \le 10^9\) \(G(n,k)\ ...

  4. [Luogu 2261] CQOI2007 余数求和

    [Luogu 2261] CQOI2007 余数求和 这一定是我迄今为止见过最短小精悍的省选题了,核心代码 \(4\) 行,总代码 \(12\) 行,堪比小凯的疑惑啊. 这题一看暴力很好打,然而 \( ...

  5. 洛谷——P2261 [CQOI2007]余数求和

    P2261 [CQOI2007]余数求和 关键在于化简公式,题目所求$\sum_{i=1}^{n}k\mod i$ 简化式子,也就是$\sum_{i=1}^{n}(k-\frac{k}{i}\time ...

  6. P2261 [CQOI2007]余数求和 【整除分块】

    一.题面 P2261 [CQOI2007]余数求和 二.分析 参考文章:click here 对于整除分块,最重要的是弄清楚怎样求的分得的每个块的范围. 假设$ n = 10 ,k = 5 $ $$  ...

  7. [洛谷P2261] [CQOI2007]余数求和

    洛谷题目链接:[CQOI2007]余数求和 题目背景 数学题,无背景 题目描述 给出正整数n和k,计算G(n, k)=k mod 1 + k mod 2 + k mod 3 + - + k mod n ...

  8. 洛谷P2261 [CQOI2007] 余数求和 [数论分块]

    题目传送门 余数求和 题目背景 数学题,无背景 题目描述 给出正整数n和k,计算G(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod ...

  9. P2261 [CQOI2007]余数求和 (数论)

    题目链接:传送门 题目: 题目背景 数学题,无背景 题目描述 给出正整数n和k,计算G(n, k)=k mod + k mod + k mod + … + k mod n的值,其中k mod i表示k ...

随机推荐

  1. Linux 时间及时区设置

    时间以及时区设置 by:授客 QQ:1033553122 1.首先确认使用utc还是local time. UTC(Universal Time Coordinated)=GMT(Greenwich ...

  2. Django 认证

    from django.contrib import auth 1.authenticate() 提供了用户认证,即验证用户名以及密码是否正确,一般需要username和password两个关键字参数 ...

  3. python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie)

    python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie) 主要包括两部分内容:(1)利用python中的dict实现Trie:(2) ...

  4. Linux主机定期打补丁修复漏洞

    1.如图扫描出来的漏洞 不看不知道,一看吓一跳  2.Linux主机如何扫描漏洞 参照:Linux操作系统下查找漏洞的几种必备兵器 3.linux操作系统怎么样打补丁?linux系统升级软件 使用yu ...

  5. 在Emacs中使用git操作

    在Emacs中使用git操作 1.安装 magit 插件 2.安装后开始使用 3.使用方法: . 使用 M-x:magit-status 打开当前仓库查看基本信息 .使用 ? 键查看magit命令绑定 ...

  6. Emmet快速编写代码

    Emmet快速编写代码 ★div → <div></div>, span → <span></span> ★CSS选择器 ​ 给标签指定id选择器 di ...

  7. 西安80投影坐标系转WGS84地理坐标系如何求七参数

    需求:西安80投影坐标系(平面坐标)转为WGS84地理坐标系(球面坐标) 这其中涉及的问题主要有以下两点: 1.一个是投影坐标系,一个是地理坐标系,而七参数指的是两个地理坐标系之间的转换,因此需要把投 ...

  8. android Application Component研究之Activity(一)

    http://blog.csdn.net/windskier/article/details/7096521 终于下定决心写写ActivityManagerService的源码分析的文章了,Activ ...

  9. centos7下安装docker(3.3创建镜像--修改dockerfile)

    1.我们在制作dockerfile的时候可能有些命令无法执行,导致镜像无法创建成功,这时我们可以修改dockerfile,从而达到我们的目的 查看Dockerfile内容 创建新的镜像,失败 Dock ...

  10. linux(centos 7)下安装elasticsearch 5 的 IK 分词器

    (一)到IK 下载 对应的版本(直接下载release版本,避免mvn打包),下载后是一个zip压缩包 (二)将压缩包上传至elasticsearch 的安装目录下的plugins下,进行解压,运行如 ...