题目

约数和

题解

此题可以说完全就是一道数学题,不难看出这道题所求的是 \(\sum\limits_{i=x}^{y}{\sum\limits_{d|i}{d}}\) 的值。

很显然,用暴力枚举肯定会超时。所以我们可以反过来思考,采用枚举约数的方法,对于每个数 \(d\) , \(1\) 到 \(n\) 间满足是\(d\)的倍数的共有\(\lfloor \frac{n}{d} \rfloor\)个数。我们可以构造一个函数

\[f(n)=\sum\limits_{i=1}^{n}{\sum\limits_{d|i}}d
\]

转换后所求的值为 \(f(y)-f(x-1)\) 。

接下来我们只需专注于求 \(f(n)\) 即可。如加粗部分所说,不难得出 \(f(n)\) 可以转换为

\[f(n)=\sum\limits_{d=1}^{n}{d \cdot \lfloor\frac{n}{d}\rfloor}
\]

似乎到这里直接计算已经很不错了,复杂度只有 \(O(x+y)\) ,然而依然会TLE。

所以我们还要想办法优化,注意到一点,对于每一个 \(n\) ,都有若干的 \(d\) 满足 \(\lfloor\frac{n}{d}\rfloor\) 都相等。举个栗子,比如 \(8\) ,当 \(d\) 从 \(1\) 到 \(8\) 分别取值时, \(\lfloor\frac{n}{d}\rfloor\) 的值分别为

\[8,4,2,2,1,1,1,1
\]

我们发现这里面有不少重复的数,我们则需要把这里面每个重复的数的个数算出来。

我们将 \(d\) 从 \(1\) 开始枚举,也就是 \(1\) 作为左界 \(l\) ,那么请问右界 \(r\) 是什么呢?(即 \(\lfloor\frac{n}{r}\rfloor=\lfloor\frac{n}{l}\rfloor\) 且 \(\lfloor\frac{n}{r+1}\rfloor<\lfloor\frac{n}{l}\rfloor\) )

其实很简单, \(r=\lfloor\frac{n}{\lfloor n/l \rfloor}\rfloor\) ,大家可以想一下是不是。然后运用等差数列求和的方式,对于每一个 \(\lfloor\frac{n}{l}\rfloor\) 结果 \(res\) 都要加上

\[\lfloor\frac{n}{l}\rfloor*\sum\limits_{i=l}^{r}{i} =(n/l)*(r-l+1)*(l+r)/2
\]

下一步再将 \(l\) 置为 \(r+1\) ,如此循环,直到 \(l>n\) 为止。

由此,这道题就愉快地解决了。

贴一下代码

代码极短,但浓缩了数学的精华。

#include<iostream>
using namespace std;
long long s(int n)
{
if (n == 0)
return 0;
long long l, r;
long long res = 0;
for (l = 1; l <= n;l = r+1)
{
r = n / (n / l);
res += (n / l) * (r - l + 1) * (l + r)/2;
}
return res;
} int main()
{
int x, y;
cin >> x >> y;
cout << s(y) - s(x - 1);
return 0;
}

洛谷P2424 约数和 题解的更多相关文章

  1. 洛谷 - P2424 - 约数和 - 整除分块

    https://www.luogu.org/problemnew/show/P2424 记 \(\sigma(n)\) 为n的所有约数之和,例如 \(\sigma(6)=1+2+3+6=12\) . ...

  2. 洛谷 P2424 约数和

    题目背景 Smart最近沉迷于对约数的研究中. 题目描述 对于一个数X,函数f(X)表示X所有约数的和.例如:f(6)=1+2+3+6=12.对于一个X,Smart可以很快的算出f(X).现在的问题是 ...

  3. 洛谷—— P2424 约数和

    https://www.luogu.org/problem/show?pid=2424 题目背景 Smart最近沉迷于对约数的研究中. 题目描述 对于一个数X,函数f(X)表示X所有约数的和.例如:f ...

  4. 洛谷P2832 行路难 分析+题解代码【玄学最短路】

    洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...

  5. 【洛谷P3960】列队题解

    [洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...

  6. 洛谷P2312 解方程题解

    洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...

  7. 洛谷P1577 切绳子题解

    洛谷P1577 切绳子题解 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位(直接舍掉2为后的小数). 输入输出格 ...

  8. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)

    洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...

  9. 洛谷 P1220 关路灯 题解

    Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...

随机推荐

  1. Intouch/ifix语音报警系统制作(4-自动发送邮件提醒)

    在近期项目完成后,有遇到情况:类似于语音报警后,中控室人员未及时报告给我们造成了事件的危害升级,以及造成很不好的影响.针对这个情况特此添加语音报警后,自动发送邮件提醒,完善现有的报警机制. 1.函数编 ...

  2. g6中的变换矩阵matrix

    在看g6文档的时候看到一个变换矩阵,不明觉厉,如下 matrix = 1 0 0 0 1 0 0 0 1 于是查资料了解里面每个数字的意义,和css3的matrix()方法似乎类同 transform ...

  3. noip模拟测试10

    T1 这道题在考场上想到了二维前缀和,就是自己算前缀和的方式有点麻烦,导致花的时间较长,但还是成功搞了出来. 因为暴力计算的话需要不停枚举左上角和右下角的 i ,j, 时间复杂度为 n^4 ,我当时就 ...

  4. CSS Grid 布局(Grid Layout)完全指南 #flight.Archives003

    Title/ CSS Grid 布局(Grid Layout)完全指南 #flight.Archives003 序 : 写完这篇文章后,我准备一直做下去了,包括flight的各个分区,也看到前方的路. ...

  5. Build a Beautiful oh-my-zsh Themes

    Selection Criteria double line; provide username, hostname, current directory; provide information o ...

  6. Linux线程简单介绍

    1.进程与线程 2.使用线程的理由 3.有关线程操作的函数 4.线程之间的互斥 5.线程之间的同步 6.试题最终代码 1.进程与线程 进程是程序执行时的一个实例,即它是程序已经执行到何种程度的数据结构 ...

  7. JSON.stringify()的用法

    **JSON.stringify() 方法用于将 JavaScript 值转换为 JSON 字符串,而我们一般只是用了第一个参数,没有在意过第二个以及第三个参数的妙用** **1.最常用的方式:** ...

  8. RadioButton 自定义样式(带动画)

    <Style x:Key="Radbtn" TargetType="{x:Type RadioButton}"> <Setter Proper ...

  9. Git出错:“Please make sure you have the correct access rights and the repository exists.”

    此问题是需要重置ssh密钥 解决步骤如下: 1.重置用户名和邮箱: 打开Git Bash 进入Git命令,输入以下命令 git config --global user.name "你的用户 ...

  10. DVWA-全等级验证码Insecure CAPTCHA

    DVWA简介 DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法 ...