BZOJ 1257: [CQOI2007]余数之和sum 分块计算,基础数论
来源:互联网 发布:三国志13英雄苍穹数据 编辑:程序博客网 时间:2024/05/17 02:05
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, 3)=3 mod 1 + 3 mod 2 + 3 mod 3 + 3 mod 4 + 3 mod 5=0+1+0+3+3=7
Input
输入仅一行,包含两个整数n, k。
Output
输出仅一行,即j(n, k)。
Sample Input
5 3
Sample Output
7
HINT
50%的数据满足:1<=n, k<=1000 100%的数据满足:1<=n ,k<=10^9
解法:
j(n,k)
=∑k mod i, 1<=i<=n
=∑k-[k/i]*i,1<=i<=n
=n*k-∑[k/i]*i,1<=i<=n
当i>k时,[k/i]*i=0。
∴只用考虑i<=k的情况,即:
j(n,k)=n*k-∑[k/i]*i,1<=i<=min(n,k)。
根据性质知道[k/i]的取值个数不超过根号k个。
又易得f(i)=[k/i]的值是下降的,所以即求根号k个连续区间。
用i从1到min(n,k)枚举,每次找到取值w,算出左右区间。
用i从1到min(n,k)枚举,每次找到取值w,算出左右区间。
左区间:L=i。
右区间:当[k/i]=w时,
根据高斯消元的性质,w=[k/i]<=k/i,
∴i>=k/w,R=(int)k/w。
∵可能存在R>=n,所以R=min(R,n)。
对于每个区间,res+=w*∑q,L<=q<=R。
然后i=R+1。
题解叙述来自:http://blog.csdn.net/u013598409/article/details/47037031 大神
//BZOJ 1257#include <bits/stdc++.h>using namespace std;int n, m;long long sum;int main(){ scanf("%d%d", &n, &m); sum += 1LL*n*m; if(n > m) n = m; int l, r, j; for(int i = 1; i <= n; i=r+1){ j = m/i; l = i; r = m/j; if(r >= n) r = n; sum -= 1LL*(l+r)*(r-l+1)*j/2LL; } printf("%lld\n", sum); return 0;}
- BZOJ 1257: [CQOI2007]余数之和sum 分块计算,基础数论
- BZOJ 1257 [CQOI2007]余数之和sum 数论
- 【题解】余数之和 数论 分块优化 [CQOI2007] BZOJ – 1257
- bzoj 1257: [CQOI2007]余数之和sum 【数学 分块统计】
- BZOJ 1257: [CQOI2007]余数之和sum [分块]【数学】
- 【分块】BZOJ 1257 [CQOI2007]余数之和sum题解
- BZOJ 1257 [CQOI2007]余数之和sum 题解
- bzoj 1257 [CQOI2007] 余数之和 sum 题解
- BZOJ 1257: [CQOI2007]余数之和sum
- 【BZOJ 1257】 [CQOI2007]余数之和sum
- 【BZOJ 1257】 [CQOI2007]余数之和sum
- bzoj 1257: [CQOI2007]余数之和sum
- bzoj 1257: [CQOI2007]余数之和sum
- bzoj 1257: [CQOI2007]余数之和sum
- BZOJ 1257 [CQOI2007]余数之和sum
- 【BZOJ 1257】[CQOI2007]余数之和sum
- 【BZOJ 1257】[CQOI2007]余数之和sum
- bzoj 1257: [CQOI2007]余数之和sum 数学
- 归并排序 快速排序
- 436. Find Right Interval 要重新做!!
- zoj1906,Relatives 欧拉函数
- Visual Assist X设置
- 开发者必看|Android 8.0 新特性及开发指南
- BZOJ 1257: [CQOI2007]余数之和sum 分块计算,基础数论
- poj 2800 找规律
- 《疯狂JAVA讲义》之六——java源程序中的注释
- JAVA中用final来修饰方法的参数
- WEB项目用Response下载
- 探究MySQL的DML提交事务的意义和DQL是否有必要提交事务
- 云计算的那些事儿之计算虚拟化
- Ubuntu16.04.1如何安装TensorFlow1.1.0(CPU版)
- 17年4月15日嵌入式Linux C语言(一)