题目链接: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. was类加载器

    来自:http://liuwei1578.blog.163.com/blog/static/49580364200991572642653/ Jar包冲突问题是在大型Java软件开发中经常遇到的问题, ...

  2. 【转】构建高性能WEB站点之 吞吐率、吞吐量、TPS、性能测试

    内容参考:构建高性能WEB站点.pdf 一.吞吐率 我们一般使用单位时间内服务器处理的请求数来描述其并发处理能力.称之为吞吐率(Throughput),单位是"req/s".吞吐率 ...

  3. android SDK模拟器环境搭建

    一.下载安装android SDK 两种方式: (1)官网下载(需FQ):https://developer.android.com/studio/index.html (2)无需FQ下载:http: ...

  4. SpringBoot入门基础

    目录 SpringBoot入门 (一) HelloWorld. 2 一 什么是springboot 1 二 入门实例... 1 SpringBoot入门 (二) 属性文件读取... 16 一 自定义属 ...

  5. 实现JWT刷新机制以及让过期时间更精确

      借助accessToken和refreshToken实现   accessToken控制刷新间隔,refreshToken控制最长过期时间   Min过期时间 = refreshToken过期时间 ...

  6. 20175226 2018-2019-2 《Java程序设计》第三周学习总结

    20175226 2018-2019-2 <Java程序设计>第三周学习总结 教材学习内容总结 编程语言的几个发展阶段 类面向机器语言(汇编语言).面向过程语言(C语言).面向对象语言(J ...

  7. get方法与post方法的区别与js获取url参数的方式

    1.get方法与post方法的区别: 区别一:get重点在从服务器上获取资源,post重点在向服务器发送数据:区别二:get传输数据是通过URL请求,以field(字段)= value的形式,置于UR ...

  8. [原创]创芯电子实验室iFPGA-Cable JTAG工具实物图

    创芯电子实验室iFPGA-Cable JTAG工具实物图 对于Xilinx平台 基于FTDI 芯片的Xilinx JTAG 同时支持UART 电平1.8~5V 支持ISE和VIVADO 速度从10M. ...

  9. Softmax 回归 vs. k 个二元分类器

    如果你在开发一个音乐分类的应用,需要对k种类型的音乐进行识别,那么是选择使用 softmax 分类器呢,还是使用 logistic 回归算法建立 k 个独立的二元分类器呢? 这一选择取决于你的类别之间 ...

  10. Dapper结合Repository模式的应用

    Dapper结合Repository模式的应用,包括如何在数据访问层(DAL)使用Dapper组件. Dapper在真实项目中使用,扩展IDbConnection的功能,支持Oracle.MS SQL ...