BZOJ系列1257《[CQOI2007]余数之和sum》题解
来源:互联网 发布:安卓系统还原软件 编辑:程序博客网 时间:2024/05/11 19:44
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
分析:O(N)是肯定不行的,需要转换为O(sqrt(N))。
首先明确等式:K%i=K-(K/i)*i;那么答案就是ans=N*K-∑[(K/i)*i]。
可以发现,每个K/i都有多个对应的i值,尤其是当i很大时会更明显。
而每个K/i最多只有sqrt(K)个,所以可以先确定这部分,再用等差数列求和公式求出。
代码如下:
#include<iostream>#include<cmath>#include<cstdio>using namespace std;typedef long long ll;ll N,K,ans=0,now;int main(){ scanf("%lld%lld",&N,&K); ans=N*K; for(ll i=1,j;i<=N;i=j+1) { if(K/i==0) break; else { j=min(K/(K/i),N); ans-=(j-i+1)*(j+i)*(K/i)/2;//等差数列求和计算。 } } printf("%lld\n",ans); return 0;}
0 0
- 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 数论
- bzoj 1257: [CQOI2007]余数之和sum
- bzoj 1257: [CQOI2007]余数之和sum
- BZOJ 1257: [CQOI2007]余数之和sum
- setjmp()与longjmp()
- Linux下查看文件大小
- Combination Sum II
- iOS开发内存警告Memory Warning和ViewController的生命周期的问题
- 以太网交换机中FID的概念和作用
- BZOJ系列1257《[CQOI2007]余数之和sum》题解
- 牛顿勘根法
- Linux工作队列实现机制
- android中ViewSwitcher的使用
- Microsoft .NET Micro Framework4.3编译环境搭建
- Http协议
- android开发相关注意事项
- 第十七周项目6-学生成绩统计1
- php读取目录及子目录下所有文件名的方法