Luogu P2261 [CQOI2007]余数求和

时间:2022-09-22 23:43:29

最近中考放假几天都在怼一道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. &lbrack;Luogu P2261&rsqb; &lbrack;CQOI2007&rsqb;余数求和 &lpar;取模计算&rpar;

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

  2. LUOGU P2261 &lbrack;CQOI2007&rsqb;余数求和&lpar;数论分块&rpar;

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

  3. 洛谷 P2261 &lbrack;CQOI2007&rsqb;余数求和 解题报告

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

  4. &lbrack;Luogu 2261&rsqb; CQOI2007 余数求和

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

  5. 洛谷——P2261 &lbrack;CQOI2007&rsqb;余数求和

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

  6. P2261 &lbrack;CQOI2007&rsqb;余数求和 【整除分块】

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

  7. &lbrack;洛谷P2261&rsqb; &lbrack;CQOI2007&rsqb;余数求和

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

  8. 洛谷P2261 &lbrack;CQOI2007&rsqb; 余数求和 &lbrack;数论分块&rsqb;

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

  9. P2261 &lbrack;CQOI2007&rsqb;余数求和 (数论)

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

随机推荐

  1. 使用 XMPP 构建一个基于 web 的通知工具——转

    Inserting of file(使用 XMPP 构建一个基于 web 的通知工具.docx) failed. Please try again. http://www.ibm.com/develo ...

  2. Chrome 扩展程序 CrxMouse 优化版 v3&period;0&period;1

    说明 CrxMouse 原版更新至 v2.7.8,跟进升级优化版至 v3.0.1. 改动说明: 1. 去除可能存在的后台数据上传隐患: 2. 解决鼠标右键拖动时的轨迹漂移问题. 3. 加入部分默认设置 ...

  3. 解析sql中的表名

    最近的项目需求中需要解析sql得表名,由于只需要表名我觉得应该用相对粗暴一点的方式来解析 初步思路: 1.转义字符:去除两个引号连在一起的 2.字符串: 去除所有被引号包裹的 3.括号:识别括号处理 ...

  4. 多关键字排序(里面有关于操作符(&lt&semi;&lt&semi;运算符 和 &gt&semi;&gt&semi;运算符 )的重载)

    一种排序 时间限制:3000 ms | 内存限制:65535 KB 难度:3   描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复:还知道这个长方形的宽和长,编号.长.宽都是整数:现 ...

  5. easy-ui 有依赖关系的下拉列表&lpar;省市区县&rpar;

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. Linux网卡聚合时,其中一个网卡有两种配置的解决方法

    先来看看: ficonfig 其中第一网卡是ssh使用: 第二个网卡是在Linux 最小化安装后IP的配置(手动获取静态IP地址)这个文章中配置过ip是192.168.1.2:在Linux重命名网卡名 ...

  7. php开发之常用验证方法

    1.邮箱验证 function isEmail($email) { if (!$email) { return false; } return preg_match('/^[_\.0-9a-z-]+@ ...

  8. 更改pip源至国内镜像

    更改pip源至国内镜像   经常在使用Python的时候需要安装各种模块,而pip是很强大的模块安装工具,但是由于国外官方pypi经常被墙,导致不可用,所以我们最好是将自己使用的pip源更换一下,这样 ...

  9. JavaScript Dom基础-9-Dom查找方法&semi; 设置DOM元素的样式&semi; innerHTML属性的应用&semi; className属性的应用&semi; DOM元素上添加删除获取属性&semi;

    JavaScript Dom基础 学习目标 1.掌握基本的Dom查找方法 domcument.getElementById() Domcument.getElementBy TagName() 2.掌 ...

  10. JS动态改变select选择变更option的index值

    document.getElementById("louyuming").options[0].selected=true; function jsSelectIsExitItem ...