BZOJ 1257 - 余数之和 - [CQOI2007]
题目链接: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]的更多相关文章
- BZOJ - 1257 余数之和(数学)
题目链接:余数之和 题意:给定正整数$n$和$k$,计算$k\%1+k\%2+\dots+k\%n$的值 思路:因为$k\%i=k-\left \lfloor \frac{k}{i} \right \ ...
- 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 余数之和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 ...
- 【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, ...
- Bzoj 1257 [CQOI2007]余数之和 (整除分块)
Bzoj 1257 [CQOI2007]余数之和 (整除分块) 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1257 一道简单题. 题目 ...
随机推荐
- 第九节,MXNet:用im2rec.py将图像打包生成.rec文件
1.生成.lst文件 制作一个文件路径和标签的列表: import os import sys #第一个参数是输入路径 input_path=sys.argv[1].rstrip(os.sep) #第 ...
- SQL Server - 四种排序, ROW_NUMBER() /RANK() /DENSE_RANK() /ntile() over()
>>>>英文版 (更简洁易懂)<<<< 转载自:https://dzone.com/articles/difference-between-rownum ...
- Django组件-用户认证
用户认证 一.auth模块 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: 1.1 .authenti ...
- 帆软报表(finereport)常用函数
1. SUM SUM(number1,number2,…):求一个指定单元格区域中所有数字之和.Number1,number2,…:1到30个参数或指定单元格区域中所有数字. 注: 函数将直接键入参数 ...
- QPS/TPS/并发量/系统吞吐量概念和公式
1.概念 我们在日常工作中经常会听到QPS/TPS这些名词,也会经常被别人问起说你的系统吞吐量有多大.一个系统的吞度量(承压能力)与request对CPU的消耗.外部接口.IO等等紧密关联,单个req ...
- Linux extmail的邮件服务器搭建
注:本文来源于<extmail搭建> 一.背景介绍 ExtMail Solution 是一个基于优秀开源软件的电子邮件系统解决方案,核心部件包括了Postfix.Amavisd-new.C ...
- js中一个对象中遇到一个相同的key所对应的value值相加
如图: 变成: js原生如下: var abc=[ {typeid:1,ade:1}, {typeid:2,ade:1}, {typeid:1,ade:2}, {typeid:1,ade:2}, {t ...
- 洛古P1036 选数 题解
[我是传送门] 这是一道很经典的深搜与回溯(难度一般) 可是就这个"普及-" 让本蒟蒻做了一晚上+半个上午(实际我不会深搜回溯,全靠框架+去重); 下面让我分享下本蒟蒻的(全排列+ ...
- Azure Database for MySQL 报 Please specify SSL options and retry.
Exception has been thrown by the aspect of an invocation. ---> Authentication to host 'xxx.mysql. ...
- arraylist 为什么 删除元素时要使用迭代器而不能使用遍历
因为你要是遍历了,arraylist 的长度就变了,容易数组越界和下标问题 public class Test { public static void main(String[] args) ...