BZOJ - 1257 余数之和(数学)
题目链接:余数之和
题意:给定正整数$n$和$k$,计算$k\%1+k\%2+\dots+k\%n$的值
思路:因为$k\%i=k-\left \lfloor \frac{k}{i} \right \rfloor * i$,所以问题就转换为计算$n*k-\sum _{i=1}^{n}\left \lfloor \frac{k}{i} \right \rfloor*i$
在某一段区间$(l,r)$内$\left \lfloor \frac{k}{i} \right \rfloor$的值是相等的,并且等于$\left \lfloor \frac{k}{l} \right \rfloor$,其中$r=\left \lfloor \frac{k}{\left \lfloor \frac{k}{l} \right \rfloor} \right \rfloor$
证明:设$g(x)=\left \lfloor \frac{k}{\left \lfloor \frac{k}{x} \right \rfloor} \right \rfloor$
因为
$$\left \lfloor \frac{k}{x} \right \rfloor\leq \frac{k}{x}$$
所以
$$\left \lfloor \frac{k}{\left \lfloor \frac{k}{x} \right \rfloor} \right \rfloor\geq \left \lfloor \frac{k}{\frac{k}{x}} \right \rfloor=x$$
即$g(x)\geq x$,于是有
$$\left \lfloor \frac{k}{g(x)} \right \rfloor\leq \left \lfloor \frac{k}{x} \right \rfloor\tag{1}$$
又因为
$$\left \lfloor \frac{k}{\left \lfloor \frac{k}{x} \right \rfloor} \right \rfloor\leq \frac{k}{\left \lfloor \frac{k}{x} \right \rfloor}$$
所以
$$\frac{k}{\left \lfloor \frac{k}{\left \lfloor \frac{k}{x} \right \rfloor} \right \rfloor}\geq \frac{k}{\frac{k}{\left \lfloor \frac{k}{x} \right \rfloor}}=\left \lfloor \frac{k}{x} \right \rfloor$$
即
$$\left \lfloor \frac{k}{g(x)} \right \rfloor\geq \left \lfloor \frac{k}{x} \right \rfloor\tag{2}$$
由$(1)(2)$得
$$\left \lfloor \frac{k}{g(x)} \right \rfloor= \left \lfloor \frac{k}{x} \right \rfloor$$
所以在$i\in[x,g(x)]$范围内,有$\left \lfloor \frac{k}{i} \right \rfloor$的值都相等,即$r=\left \lfloor \frac{k}{\left \lfloor \frac{k}{l} \right \rfloor} \right \rfloor$
在求$\sum _{i=1}^{n}\left \lfloor \frac{k}{i} \right \rfloor*i$时,可以分为一块一块来求,对于每一块,把$\left \lfloor \frac{k}{l} \right \rfloor$,然后利用等差数列求和公式求出$\sum _{i=l}^{r}i$即可。
#include <iostream>
#include <algorithm>
#include <cstdio> using namespace std; typedef long long ll; ll n, k; int main()
{
scanf("%lld%lld", &n, &k);
ll res = n * k;
for (ll l = , r = ; l <= n; l = r + ) {
if (k / l) r = min(k / (k / l), n);
else r = n;
res -= (k / l) * (r - l + ) * (l + r) / ;
}
printf("%lld\n", res);
return ;
}
BZOJ - 1257 余数之和(数学)的更多相关文章
- BZOJ 1257 余数之和
Description 给出正整数\(n\)和\(k\),计算\(j(n, k)=k\;mod\;1\;+\;k\;mod\;2\;+\;k\;mod\;3\;+\;-\;+\;k\;mod\;n\) ...
- BZOJ 1257 余数之和sum
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1257 题意:计算sigama(m%i)(1<=i<=n). 思路: 这样就简 ...
- BZOJ 1257 - 余数之和 - [CQOI2007]
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1257 题意: 给定正整数 $n,k$,求 $(k \bmod 1) + (k \bmod ...
- [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} ...
- bzoj 1257 余数之和 —— 数论分块
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1257 \( \sum\limits_{i=1}^{n}k\%i = \sum\limits_ ...
- BZOJ 1257 余数之和 题解
题面 这道题是一道整除分块的模板题: 首先,知道分块的人应该知道,n/i最多有2*sqrt(n)种数,但这和余数有什么关系呢? 注意,只要n/i的值和n/(i+d)的值一样,那么n%i到n%(i+d) ...
- BZOJ 1257 余数之和sum(分块优化)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=46954 题意:f(n, k)=k mod 1 + k mod 2 ...
- bzoj 1257: [CQOI2007]余数之和 (数学+分块)
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 ...
- BZOJ 1257 [CQOI2007]余数之和 数学
都不知道说什么好...咕咕到现在.. 求:$\sum_{i=1}^n \space k\space mod \space i$ 即求:$n*k-\sum_{i=1}^n\space \lfloor \ ...
随机推荐
- SQL语句性能分析
SQL语句性能分析 explain执行计划 用法: explain select 语句 命令: show database; use mysql explain select * from user; ...
- [POI2004] PRZ - 状压dp
很简单的子集枚举状压dp 这个 (j-1)&i 的子集枚举是真的骚气 #include <bits/stdc++.h> using namespace std; int W,n,t ...
- postgreSQL生成建表语句
参考博文:https://blog.csdn.net/xiaofengtoo/article/details/84395199 修复了其函数中的bug,支持生成包含:字段(支持数组类型字段).约束.索 ...
- Window逆向基础之逆向工程介绍
逆向工程 以设计方法学为指导,以现代设计理论.方法.技术为基础,运用各种专业人员的工程设计经验.知识和创新思维,对已有产品进行解剖.深化和再创造. 逆向工程不仅仅在计算机行业.各行各业都存在逆向工程. ...
- Java基础小知识(一)
序言:“不积跬步,无以至千里.不积小流,无以成江海.”每一个庞大的知识架构都是由无数个小知识点慢慢积累起来的,没有量变的积累,就没有质变上的飞跃,成功往往离不开积累. 今天就和大家分享一些我在学习J ...
- 使用Powershell开机启动隐藏窗口的程序
1.打开注册表找到键值:计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 2.添加字符串值:StartJetSer ...
- 如何在Word中批量选中特定文本
如何在Word中批量选中特定文本 举个例子,我们对如下文本进行操作,将文本中所有的“1111111”标红,所有的“2222222”标绿,所有的“3333333”标蓝 在Word中找到“查找”下的“高级 ...
- JS高级---拷贝继承:把一个对象中的属性或者方法直接复制到另一个对象中
拷贝继承:把一个对象中的属性或者方法直接复制到另一个对象中 浅拷贝 function Person() { } Person.prototype.age = 10; Person.prototype. ...
- html5 标准文档结构
<!DOCTYPE html> <html lang="zh-cmn-Hans"> <head> <meta charset=" ...
- 转载一篇棒棒的AWK教程
处理文件经常要用到awk,老是找同事帮忙,次数多了难免被吐槽orz,其实之前也有找过awk的教程,表示一直看不太懂 最近翻到了这篇教程,表示笔者真的太棒了,反正我是看一遍就懂了哈哈 剩下的只是熟悉度的 ...