【除法分块】BZOJ1257 [CQOI2007]余数之和sum
2017-08-20 16:04
281 查看
题面在这里
把答案的形式写出来就是这样的:
∑i=1mn−⌊ni⌋⋅i
nm−∑i=1m⌊ni⌋⋅i
可以发现,随着i的增长,⌊ni⌋是可以分块的
而且最多有O(n√)级别的块数
示例程序:
把答案的形式写出来就是这样的:
∑i=1mn−⌊ni⌋⋅i
nm−∑i=1m⌊ni⌋⋅i
可以发现,随着i的增长,⌊ni⌋是可以分块的
而且最多有O(n√)级别的块数
示例程序:
#include<cstdio> #include<cmath> #define LL long long LL n,nn,m,ans,a[3162300]; int main(){ scanf("%lld%lld",&m,&n);nn=sqrt(n); ans=n*(m); for (int k=1;k<=nn;k++){ a[k]=n/k; LL l=n/(k+1)+1,r=n/k; if (l>m) continue; if (r>m) r=m; ans-=(k*((l+r)*(r-l+1)/2)); } for (int i=1;i<nn;i++){ LL k=a[i],l=n/(k+1)+1,r=n/k; if (l>m) continue; if (r>m) r=m; ans-=(k*((l+r)*(r-l+1)/2)); } if (n/nn!=nn){ LL k=a[nn],l=n/(k+1)+1,r=n/k; ans-=(k*((l+r)*(r-l+1)/2)); } printf("%lld",ans); return 0; }
相关文章推荐
- [除法分块] BZOJ1257: [CQOI2007]余数之和sum
- BZOJ1257: [CQOI2007]余数之和sum【分块】
- 【BZOJ1257】[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 题解
- BZOJ1257 [CQOI2007]余数之和sum
- [bzoj1257][CQOI2007]余数之和sum
- [bzoj1257][CQOI2007]余数之和sum
- BZOJ1257: [CQOI2007]余数之和sum
- BZOJ1257 [CQOI2007]余数之和sum(枚举商)
- [BZOJ 1257] [CQOI2007] 余数之和sum 【数学】
- BZOJ 1257: [CQOI2007]余数之和sum 分块计算,基础数论
- bzoj 1257: [CQOI2007]余数之和sum
- 【二分+数学】bzoj1257: [CQOI2007]余数之和sum
- [BZOJ1257][CQOI2007]余数之和sum