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的值 其中 ...
随机推荐
- delegate operator (C# reference) and => operator (C# reference)
The delegate operator creates an anonymous method that can be converted to a delegate type: C#CopyRu ...
- DEDECMS编辑器粘贴Word
我司需要做一个需求,就是使用富文本编辑器时,不要以上传附件的形式上传图片,而是以复制粘贴的形式上传图片. 在网上找了一下,有一个插件支持这个功能. WordPaster 安装方式如下: 直接使用Wor ...
- 关于线段树or 树状树状 在二维平面搞事情!Orz
第一式:https://ac.nowcoder.com/acm/contest/143/I 题意: 有 n 个点,一个点集 S 是好的,当且仅当对于他的每个子集 T,存在一个右边无限长的矩形,使得这个 ...
- random、os、时间模块
一.random 模块 1.随机小数 random.random() #产生大于0且小于1之间的小数 random.uniform(1,3) #产生1到3之间的随机小数 2.随机整数 rand ...
- 从有状态应用(Session)到无状态应用(JWT),以及 SSO 和 OAuth2
不管用哪种方式认证用户,都可能被中间人攻击窃取 SessionID 或 Token,从而发生 CSRF 攻击.解决方式就是全站 HTTPS.现在 Let's Encrypt 已经支持免费的通配符 HT ...
- C#通过UserAgent判断智能设备(Android,IOS,PC,Mac)
尝试通过 Agent 来获取相应的智能手机设备标识,根据标识的不同来输出对应设备所需的显示样式及其他.经过努力,终于搜集了比较全的 智能设备 的 Agent,相应的判断过程及代码如下,不明白的留言. ...
- Codeforces Round #410 (Div. 2)B. Mike and strings(暴力)
传送门 Description Mike has n strings s1, s2, ..., sn each consisting of lowercase English letters. In ...
- Git007--删除文件
Git--删除文件 本文来自于:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/ ...
- SpringBoot项目FatJar同War之间的相互转换
目录 1.原有的项目结构 修改后的项目结构 常见的dependency的scope 1.原有的项目结构 启动类 @SpringBootApplication(exclude = {DataSource ...
- 洛谷 P1731 [NOI1999]生日蛋糕(搜索剪枝)
题目链接 https://www.luogu.org/problemnew/show/P1731 解题思路 既然看不出什么特殊的算法,显然是搜索... dfs(u,v,s,r0,h0)分别表示: u为 ...