题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1257

题意:

给定正整数 $n,k$,求 $(k \bmod 1) + (k \bmod 2) + \cdots + (k \bmod n) = \sum_{i=1}^{n}(k \bmod i)$ 的值。

题解:

显然 $k \bmod i = k - \lfloor k/i \rfloor \times i$,因此 $\sum_{i=1}^{n}(k \bmod i) = \sum_{i=1}^{n}(k - \lfloor k/i \rfloor \times i) = n \cdot k - \sum_{i=1}^{n}(\lfloor k/i \rfloor \times i)$。

对于任意正整数 $x \in [1,k]$, 设 $g(x) = \lfloor \frac{k}{\lfloor k/x \rfloor} \rfloor$,不难得出 $\lfloor k/x \rfloor \le k/x \Rightarrow \frac{k}{\lfloor k/x \rfloor} \ge \frac{k}{k/x} \Rightarrow \lfloor \frac{k}{\lfloor k/x \rfloor} \rfloor \ge \lfloor \frac{k}{k/x} \rfloor$,即 $g(x) \ge \lfloor \frac{k}{k/x} \rfloor = \lfloor x \rfloor = x$。

又根据 $f(x) = \frac{k}{x}$ 是一个单调递减函数,得到

$f(g(x)) \le f(x) \Rightarrow \frac{k}{g(x)} \le \frac{k}{x} \Rightarrow \lfloor \frac{k}{g(x)} \rfloor \le \lfloor \frac{k}{x} \rfloor$

另一方面,根据 $g(x) \le \frac{k}{\lfloor k/x \rfloor}$ 还能得出

因此,综上可以得出 $\lfloor \frac{k}{g(x)} \rfloor = \lfloor \frac{k}{x} \rfloor$;也就是说,对于任意的正整数 $i \in [x,g(x)]$,$\lfloor \frac{k}{i} \rfloor$ 都是相等的。

而与此同时,对于任意的正整数 $i \in [1,k]$,$\lfloor \frac{k}{i} \rfloor$ 的值最多只有 $2 \sqrt{k}$ 个,这是因为:

当 $i \le \sqrt{k}$ 时,$i$ 最多只有 $\sqrt{k}$ 个选择,相对应地,$\lfloor \frac{k}{i} \rfloor$ 也就最多 $\sqrt{k}$ 个值;而当 $i > \sqrt{k}$ 时,$\lfloor \frac{k}{i} \rfloor \le \frac{k}{i} < \sqrt{k}$,即 $\lfloor \frac{k}{i} \rfloor$ 只能取 $1 \sim \sqrt{k}$ 之间的值。

所以,对于任意的正整数 $i \in [1,k]$,$\lfloor \frac{k}{i} \rfloor$ 的值划分成 $O(\sqrt{k})$ 段。每一段上 $i \in [x,g(x)]$,$\lfloor \frac{k}{i} \rfloor$ 的值都等于 $\lfloor \frac{k}{x} \rfloor$。而在这一段中,$\sum_{i=x}^{g(x)}(\lfloor k/i \rfloor \times i) = \lfloor k/x \rfloor \sum_{i=x}^{g(x)}i$,即一个等差数列的求和。因此这个算法时间复杂度为 $O(\sqrt{k})$。

AC代码:

/**************************************************************
Problem: 1257
User: Dilthey
Language: C++
Result: Accepted
Time:20 ms
Memory:1288 kb
****************************************************************/ #include<bits/stdc++.h>
using namespace std;
typedef long long ll; ll n,k,ans;
inline ll g(ll x){return k/(k/x);}
inline ll sum(ll L,ll R){return (L+R)*(R-L+)/;}
int main()
{
while(cin>>n>>k)
{
ll ans=n*k;
n=min(n,k);
for(ll x=;x<=n;x=g(x)+)
{
ll y=min(g(x),n);
ans-=(k/x)*sum(x,y);
}
cout<<ans<<endl;
}
}

BZOJ 1257 - 余数之和 - [CQOI2007]的更多相关文章

  1. BZOJ - 1257 余数之和(数学)

    题目链接:余数之和 题意:给定正整数$n$和$k$,计算$k\%1+k\%2+\dots+k\%n$的值 思路:因为$k\%i=k-\left \lfloor \frac{k}{i} \right \ ...

  2. BZOJ 1257 余数之和

    Description 给出正整数\(n\)和\(k\),计算\(j(n, k)=k\;mod\;1\;+\;k\;mod\;2\;+\;k\;mod\;3\;+\;-\;+\;k\;mod\;n\) ...

  3. BZOJ 1257 余数之和sum

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1257 题意:计算sigama(m%i)(1<=i<=n). 思路: 这样就简 ...

  4. [bzoj] 1257 余数之和sum || 数论

    原题 给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + - + k mod n的值,其中k mod i表示k除以i的余数. \(\sum^n_{i=1} ...

  5. bzoj 1257 余数之和 —— 数论分块

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1257 \( \sum\limits_{i=1}^{n}k\%i = \sum\limits_ ...

  6. BZOJ 1257 余数之和 题解

    题面 这道题是一道整除分块的模板题: 首先,知道分块的人应该知道,n/i最多有2*sqrt(n)种数,但这和余数有什么关系呢? 注意,只要n/i的值和n/(i+d)的值一样,那么n%i到n%(i+d) ...

  7. BZOJ 1257 余数之和sum(分块优化)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=46954 题意:f(n, k)=k mod 1 + k mod 2 ...

  8. 【BZOJ1257】【CQOI2007】余数之和sum

    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, ...

  9. Bzoj 1257 [CQOI2007]余数之和 (整除分块)

    Bzoj 1257 [CQOI2007]余数之和 (整除分块) 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1257 一道简单题. 题目 ...

随机推荐

  1. Stm32 GPIO复习

    地点:中图四楼. 1.七个寄存器 配置寄存器:GPIOx_CPL.GPIOx_CPH; 数据寄存器:GPIOx_IDR.GPIOx_ODR: 置位/复位寄存器:GPIOx_BSRR 复位寄存器:GPI ...

  2. 「luogu3258」[JLOI2014] 松鼠的新家

    https://www.luogu.org/problemnew/show/P3258 (树剖裸题 树上差分 = = 差分 + lca 1. 树上差分基本思想:和差分一样,用前缀和的思想来处理解(操作 ...

  3. linux安装selenium+chrome+phantomjs

    1. 安装 selenium pip3 install selenium pip3 安装参考 2. 安装 ChromeDriver yum install chromedriver.x86_64 3. ...

  4. P2947 [USACO09MAR]向右看齐Look Up--单调栈

    单调栈真的很好用呢! P2947 [USACO09MAR]向右看齐Look Up 题目描述 Farmer John's N (1 <= N <= 100,000) cows, conven ...

  5. Shell的类型

    1.类Unix系统中有各种shell.如: /bin/bash /bin/csh /bin/ksh /bin/sh /bin/tcsh /bin/zsh 2.在/etc/shells文本文件中可以查看 ...

  6. Matlab将多项式的系数设为0

    符号运算时有些多项式的系数值接近于0,像这样 fun = 3.5753839759325595498222646101085e-49*x + 1.836709923159824231201150839 ...

  7. net core体系-web应用程序-4asp.net core2.0 项目实战(1)-13基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级

    1.权限管理 权限管理的基本定义:百度百科. 基于<Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员.后台管理员同时登录>我们做过了登录认证, ...

  8. 利用yarn capacity scheduler在EMR集群上实现大集群的多租户的集群资源隔离和quota限制

    转自:https://m.aliyun.com/yunqi/articles/79700 背景 使用过hadoop的人基本都会考虑集群里面资源的调度和优先级的问题,假设你现在所在的公司有一个大hado ...

  9. 微信小程序--家庭记账本开发--01

    微信小程序的开发准备与开发工具的学习 在这次寒假伊始,临近春节,学习进程有所拉下,现在补上.寻找了好多网站的相关学习视频,包括微信公众平台关于小程序这方面也有好多相关资料供查阅. 1.开发准备: 首先 ...

  10. C语言中使用bool

    声明 C语言中是没有bool类型的. 使用方法 参考: https://stackoverflow.com/q/1921539.