洛谷P2424 约数和 题解
题目
题解
此题可以说完全就是一道数学题,不难看出这道题所求的是 \(\sum\limits_{i=x}^{y}{\sum\limits_{d|i}{d}}\) 的值。
很显然,用暴力枚举肯定会超时。所以我们可以反过来思考,采用枚举约数的方法,对于每个数 \(d\) , \(1\) 到 \(n\) 间满足是\(d\)的倍数的共有\(\lfloor \frac{n}{d} \rfloor\)个数。我们可以构造一个函数
\]
转换后所求的值为 \(f(y)-f(x-1)\) 。
接下来我们只需专注于求 \(f(n)\) 即可。如加粗部分所说,不难得出 \(f(n)\) 可以转换为
\]
似乎到这里直接计算已经很不错了,复杂度只有 \(O(x+y)\) ,然而依然会TLE。
所以我们还要想办法优化,注意到一点,对于每一个 \(n\) ,都有若干的 \(d\) 满足 \(\lfloor\frac{n}{d}\rfloor\) 都相等。举个栗子,比如 \(8\) ,当 \(d\) 从 \(1\) 到 \(8\) 分别取值时, \(\lfloor\frac{n}{d}\rfloor\) 的值分别为
\]
我们发现这里面有不少重复的数,我们则需要把这里面每个重复的数的个数算出来。
我们将 \(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\) 都要加上
\]
下一步再将 \(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 约数和 题解的更多相关文章
- 洛谷 - P2424 - 约数和 - 整除分块
https://www.luogu.org/problemnew/show/P2424 记 \(\sigma(n)\) 为n的所有约数之和,例如 \(\sigma(6)=1+2+3+6=12\) . ...
- 洛谷 P2424 约数和
题目背景 Smart最近沉迷于对约数的研究中. 题目描述 对于一个数X,函数f(X)表示X所有约数的和.例如:f(6)=1+2+3+6=12.对于一个X,Smart可以很快的算出f(X).现在的问题是 ...
- 洛谷—— P2424 约数和
https://www.luogu.org/problem/show?pid=2424 题目背景 Smart最近沉迷于对约数的研究中. 题目描述 对于一个数X,函数f(X)表示X所有约数的和.例如:f ...
- 洛谷P2832 行路难 分析+题解代码【玄学最短路】
洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...
- 【洛谷P3960】列队题解
[洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...
- 洛谷P2312 解方程题解
洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...
- 洛谷P1577 切绳子题解
洛谷P1577 切绳子题解 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位(直接舍掉2为后的小数). 输入输出格 ...
- 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)
洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...
- 洛谷 P1220 关路灯 题解
Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...
随机推荐
- jvm源码解读--11 ldc指令的解读
写一个java文件 public static void main(String[] args) { String str1="abc"; String str2 ="a ...
- Drupal 远程代码执行漏洞(CVE-2019-6339)
影响版本 Drupal core 7.62之前的7.x版本.8.6.6之前的8.6.x版本和8.5.9之前的8.5.x版本 poc https://github.com/thezdi/PoC/blob ...
- leetcode 有效三角形的个数
题目描述: 平明伞兵解法: 既然要求满足三角形要求的三边,简单来说,就是最短两边之和大于第三边,所以,第一步Arrays.sort().先排序,然后直接伞兵暴力法,三重循环.当然最后肯定是能跑出来的, ...
- Kubernetes安装报错总结
1.kubeadm init初使化报错 [root@k8s01 ~]# kubeadm init --kubernetes-version=v1.13.3 --pod-network-cidr=1 ...
- 根据JavaScript中原生的XMLHttpRequest实现jQuery的Ajax
基本介绍 XmlHttpRequest XmlHttpRequest是JavaScript中原生的,历史悠久的一种发送网络请求的方案. 基本上所有前端框架对于网络请求的部分都是基于它来完成的. 在本章 ...
- linux50个常用命令
1.存放用户账号的文件在哪里? /etc/passwd 2.如何删除一个非空的目录? rm -rf 目录名 3.查看当前的工作目录用什么命令? pwd 4.创建一个文件夹用什么命令? mkdir 5. ...
- Window2016 安装Docker
测试环境 Windows2016 DataCenter 安装步骤 1.开始运行"PowerShell" 2.指定Tls协议为1.2.(建议都先执行这一条命令,官方文档没有这一步,实 ...
- Java8 新特性 Stream Api 之集合遍历
前言 随着java版本的不断更新迭代,java开发也可以变得甜甜的,最新版本都到java11了,但是后面版本也是不在提供商用支持,需要收费,但是java8 依然是持续免费更新使用的,后面版本也更新很快 ...
- 阿里云NAS文件迁移项目实践
阿里云文件存储NAS是阿里云推出的用于传统文件共享的,使用NFS协议挂载的共享文件夹. 产品背景 下图是NAS和阿里云另一明星产品OSS以及块存储EBS的区别 NAS核心优势:无需修改程序,挂载之后, ...
- 【XSS-labs】Level 11-15
Level 11 和level 10 差不多的页面,传参后查看页面源代码:依旧是第3个可以正常传参. 尝试level 10 的payload 发现 " 被实体化 可以打开控制台将第三个inp ...