CQOI2007 余数之和
Time Limit: 5 Sec Memory Limit: 128 MB
Description
给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值
其中k mod i表示k除以i的余数。
例如j(5, 3)=3 mod 1 + 3 mod 2 + 3 mod 3 + 3 mod 4 + 3 mod 5=0+1+0+3+3=7
Input
输入仅一行,包含两个整数n, k。
1<=n ,k<=10^9
Output
输出仅一行,即j(n, k)。
Sample Input
5 3
Sample Output
7
##简要题解
我们可以把原式数学化一下:求$\sum \limits_^n k \mod i$。
我们可以发现
\begin{align*}
\text{原式}&=\sum \limits_{i=1}^n k \mod i\\
&=\sum \limits_{i=1}^n k- \lfloor \frac ki \rfloor \cdot i\\
&=nk - \sum \limits_{i=1}^n \lfloor \frac ki \rfloor \cdot i
\end{align*}
\]
显然,只要$\lfloor \frac ki \rfloor$的值在一段段i的范围内是一样的。我们的任务就是要求出每一段这样的范围。我们令$f(x)=\lfloor \frac kx \rfloor \qquad g(x)=\lfloor \frac k{\lfloor \frac kx \rfloor} \rfloor$,那么其实直觉就可以告诉我们$g(x)\(就可以表示f值=\)\lfloor \frac kx \rfloor$的最大的数。然而数学毕竟是一门严谨的科学,我们可能需要来证明一下。
显然$\lfloor \frac kx \rfloor \leq \frac kx$,那么$g(x)=\lfloor \frac k{\lfloor \frac kx \rfloor} \rfloor \geq \lfloor \frac k{\frac kx } \rfloor = x \text{即} g(x) \geq x$。所以有$\lfloor \frac k{g(x)} \rfloor \leq \lfloor \frac kx \rfloor$。
同时,\(\lfloor \frac k{g(x)} \rfloor = \lfloor \frac k{\lfloor \frac k{\lfloor \frac kx \rfloor} \rfloor} \rfloor \geq \lfloor \frac k{ \frac k{\lfloor \frac kx \rfloor} } \rfloor = \lfloor \frac kx \rfloor\),即$\lfloor \frac k{g(x)} \rfloor \geq \lfloor \frac kx \rfloor$ 又$\lfloor \frac k{g(x)} \rfloor \leq \lfloor \frac kx \rfloor$,所以$\lfloor \frac k{g(x)} \rfloor = \lfloor \frac kx \rfloor$。
所以$\forall i \in [x,\lfloor \frac k{\lfloor \frac kx \rfloor} \rfloor]\(,\)\lfloor \frac ki \rfloor$的值都相等!其实之前的猜想的“最大”是很显然的,也没必要再去证一遍了,就算不是最大的,也不影响我们的这个程序。
下面我们就有了一个算法:统计$[1,g(1)]\(的区间里的\)\lfloor \frac ki \rfloor \cdot i$的和,既然$\lfloor \frac ki \rfloor$都一样,那就用等差数列求和公式来算一下即可。然后在从$g(1)+1$到$g(g(1)+1)$这段区间再如此统计……重复上述步骤,直到$i>k$,此时$\lfloor \frac ki \rfloor$一定等于0,直接令g(i)=n,统计i..n即可。
下面我们算一下时间复杂度。这个时间复杂度,应该等于$\lfloor \frac ki \rfloor$有多少个不同的取值是一样的。当$i \leq \sqrt k$时,i只有$\sqrt k$中取值,所以$\lfloor \frac ki \rfloor$也最多只有$\sqrt k$种取值。当$i > \sqrt k$时,\(\lfloor \frac ki \rfloor < \sqrt k\),所以$\lfloor \frac ki \rfloor$也最多只有$\sqrt k$种取值,所以$\lfloor \frac ki \rfloor$一共最多$2 \sqrt k$种取值。所以该算法的之间复杂度为$O(\sqrt k)$。
代码
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
int n,k;ll ans;
int main(){
scanf("%d%d",&n,&k);ans=1ll*n*k;
for(register int i=1,g;i<=n;i=g+1){
if(k/i!=0)g=min(n,k/(k/i));else g=n;//错误笔记:如果k/i==0即k<i的话,k/(k/i)会炸掉,所以要特判一下。
ans-=(ll)(k/i)*(i+g)*(g-i+1)/2;
}
printf("%lld\n",ans);
}
CQOI2007 余数之和的更多相关文章
- BZOJ 1257: [CQOI2007]余数之和sum
1257: [CQOI2007]余数之和sum Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 3769 Solved: 1734[Submit][St ...
- bzoj 1257: [CQOI2007]余数之和sum 数学 && 枚举
1257: [CQOI2007]余数之和sum Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 1779 Solved: 823[Submit][Sta ...
- BZOJ 1257: [CQOI2007]余数之和sum( 数论 )
n >= k 部分对答案的贡献为 k * (n - k) n < k 部分贡献为 ∑ (k - ⌊k / i⌋ * i) = ∑ , ⌊k / i⌋ 相等的数是连续的一段, 此时这段连 ...
- 1257: [CQOI2007]余数之和sum
1257: [CQOI2007]余数之和sum Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 2001 Solved: 928[Submit][Sta ...
- BZOJ 1257: [CQOI2007]余数之和sum【神奇的做法,思维题】
1257: [CQOI2007]余数之和sum Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 4474 Solved: 2083[Submit][St ...
- BZOJ_1257_ [CQOI2007]余数之和sum_数学
BZOJ_1257_ [CQOI2007]余数之和sum_数学 题意:给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值. 分 ...
- BZOJ 1257: [CQOI2007]余数之和
1257: [CQOI2007]余数之和 Time Limit: 5 Sec Memory Limit: 128 MB Description 给出正整数n和k,计算j(n, k)=k mod 1 ...
- 1257: [CQOI2007]余数之和
题目链接 bzoj1257: [CQOI2007]余数之和 题解 数论分块,乘等差数列求和 代码 #include<bits/stdc++.h> using namespace std; ...
- bzoj千题计划173:bzoj1257: [CQOI2007]余数之和sum
http://www.lydsy.com/JudgeOnline/problem.php?id=1257 k%i=k-int(k/i)*i 除法分块,对于相同的k/i用等差序列求和来做 #includ ...
- BZOJ1257 CQOI2007 余数之和 【数分块】
BZOJ1257 CQOI2007 余数之和 Description 给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + - + k mod n的值 其中 ...
随机推荐
- string 、char* 、 char []的转换
1.string->char* (1)data string s = "goodbye"; const char* p=str.data(); (2)c_str() stri ...
- brew安装指定版本的软件
原文:https://www.jianshu.com/p/aadb54eac0a8 在mac中使用 brew install 安装的软件默认都是最新版本的.有时候我们需要旧版本(指定版本)的时候,应该 ...
- 动态规划 List
例题 #A 传纸条(Accepted) #B 乘积最大 (Unaccepted) #C 石子合并 (Accepted) #D 加分二叉树 (Unaccepted) #E 没有上 ...
- 关于Spring中BeanUtils的一次使用问题记录
1.问题描述:今天在进行前后端联调的时候,发现商品图片不能正常显示: 2.排查过程:查看浏览器控制台,发现调用接口返回的数据关于图片的字段未返回数据: 然后,又跑了一下Dao层的单元测试,从 ...
- ES命令
基础概念 Elasticsearch有几个核心概念.从一开始理解这些概念会对整个学习过程有莫大的帮助. 接近实时(NRT) Elasticsearch是一个接近实时的搜索平台.这意味 ...
- JS-闭包(Closures)和let声明块级作用域变量
闭包: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures 闭包是函数和声明该函数的词法环境的组合. let: https ...
- v-text、v-html、v-bind、v-show
<!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...
- 【ABAP系列】SAP 的逻辑数据库解析
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 的逻辑数据库解析 前 ...
- [eclipse相关] 001 - 启动+运行优化
本随笔参考了其他博客内容,且在验证有效之下才或誊抄或摘录或加上自己经验组合而成. 参考博客: 1,http://zwd596257180.gitee.io/blog/2019/04/17/eclips ...
- 洛谷 P1339 [USACO09OCT]热浪Heat Wave(dijkstra)
题目链接 https://www.luogu.org/problemnew/show/P1339 最短路 解题思路 dijkstra直接过 注意: 双向边 memset ma数组要在读入之前 AC代码 ...