[原博客] BZOJ 1257 [CQOI2007] 余数之和
题目链接
题意:
给定n,k,求 ∑(k mod i) {1<=i<=n} 其中 n,k<=10^9。
即 k mod 1 + k mod 2 + k mod 3 + … + k mod n的值。
我们先来看商之和。
给定n,k,求∑(k/i) {1<=i<=n} 其中/为整除。
可以得到一个引理,k/i值的个数不超过2*√k种。
证明:k整除小于√k的数,都会有一个不同的结果;k整除大于√k的数,结果肯定小于√k,所以最多也只能有√k种结果。
于是我们可以枚举结果的取值累加。是O(√k)级别的。
代码可以这样写:
LL sum(LL n,LL k){ //calc sigma(k/i) 1<=i<=n
LL sum = ;
; i <= n ; i ++ ){
LL a = k / i ; LL b = k / a ;
b = min(b,n) ;
sum += a * (b-i+) ;
}
return sum;
}
其中a是k/i的值,b是最大得到k/i这个值的数,b-i+1为取得同一个值的区间长度。
然后来看余数之和:
我们知道 a mod b == a - a/b*b (整除)。
于是 ∑(k mod i) {1<=i<=n}就可以写成n*k-∑k/i*i {1<=i<=n}对于k/i值相同的一段,后面那一项是一个等差数列,求和就好了。
/**************************************************************
Problem: 1257
User: zrts
Language: C++
Result: Accepted
Time:8 ms
Memory:1272 kb
****************************************************************/
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
//by zrt
//problem:
using namespace std;
typedef long long LL;
const int inf(0x3f3f3f3f);
);
LL n,k;
int main(){
#ifdef LOCAL
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
scanf("%lld%lld",&n,&k);
LL ans=n*k;
LL sub=;
;i<=n&&i<=k;i++){
LL a=k/i;LL b=k/a;
b=min(b,n);
sub+=a*(i+b)*(b-i+)/;
i=b;
}
printf("%lld\n",ans-sub);
;
}
另有一道题:切巧克力。在SegmentFault上有人提问,链接。我的回答就是用了与这个类似的方法。
[原博客] BZOJ 1257 [CQOI2007] 余数之和的更多相关文章
- Bzoj 1257 [CQOI2007]余数之和 (整除分块)
Bzoj 1257 [CQOI2007]余数之和 (整除分块) 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1257 一道简单题. 题目 ...
- 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⌋ 相等的数是连续的一段, 此时这段连 ...
- BZOJ 1257: [CQOI2007]余数之和sum【神奇的做法,思维题】
1257: [CQOI2007]余数之和sum Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 4474 Solved: 2083[Submit][St ...
- BZOJ 1257: [CQOI2007]余数之和
1257: [CQOI2007]余数之和 Time Limit: 5 Sec Memory Limit: 128 MB Description 给出正整数n和k,计算j(n, k)=k mod 1 ...
- [BZOJ 1257] [CQOI2007] 余数之和sum 【数学】
题目链接:BZOJ - 1257 题目分析 首先, a % b = a - (a/b) * b,那么答案就是 sigma(k % i) = n * k - sigma(k / i) * i ( ...
- 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]余数之和——数论分块
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1257 \( n\%i = n - \left \lfloor n/i \right \rfl ...
随机推荐
- iOS 并行编程:NSOperation Queues
1 简介 1.1 功能 Operation Queue也是IOS的一种并行编程技术,类似Dispatch Queue可以帮助用户管理多线程.但是Operation Queue将任务封装在 ...
- 从键盘输入当月利润I,求应发放奖金总数?
企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%:20万到40万之间时 ...
- Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'
出现这个问题,说明oracle的驱动包没有成功加载. 1.检查maven pom.xml有没有引入驱动: <dependency> <group ...
- Asp.NET获取文件及其路径
[相对路径] Request.ApplicationPath /src Path.GetDirectoryName(HttpContext.Current.Request.RawUrl ) //s ...
- 安卓数据存储(3):SQLite数据库存储
SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级:使用 SQLit ...
- 移动端rem布局的适配mixin【转藏】
/*================================================================ 以下为基于ip5 宽度320做的适配,标准html{font-si ...
- 20160408javaweb之JDBC ---PreparedStatement
PreparedStatement 1.Sql注入:由于jdbc程序在执行的过程中sql语句在拼装时使用了由页面传入参数,如果用户恶意传入一些sql中的特殊关键字,会导致sql语句意义发生变化,这种攻 ...
- mysql merge表介绍
在Mysql数据库中,Mysql Merge表有点类似于视图.下面就让我们来一起了解一下Mysql Merge表都有哪些优点,希望对您能有所帮助. Mysql Merge表的优点: A: 分离静态的和 ...
- 项目报错-无法解析类型 XXXX.xx 从必需的 .class 文件间接引用了它
这个编译错误有几个原因 1.jdk版本问题 要是报错是某些java包里的东西那就可以肯定是jdk版本的问题, 比如无法解析类型java.lang.Object,无法解析类型java.lang.Char ...
- 10.21_Nutz批量插入顺序,POI,wiki持续关注,POI,SSH,数据库优先
(1)Nutz,dao的批量插入会关注顺序吗? http://www.douban.com/group/topic/64322582/ (2)工作需要优先!!! POI,SSH,数据库管理及plsq ...