bzoj 1257: [CQOI2007]余数之和sum
2017-10-06 16:48
363 查看
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=7Input
输入仅一行,包含两个整数n, k。Output
输出仅一行,即j(n, k)。Sample Input
5 3
Sample Output
7
HINT
50%的数据满足:1<=n, k<=1000 100%的数据满足:1<=n ,k<=10^9solution
根据题目可以写出ans=∑i=1nk%i首先知道一点 a%b 可以表示为 a−b∗⌊ab⌋,写过高精取模的人应该都知道
所以ans=∑i=1nk−i∗⌊ki⌋=n∗k−∑i=1ni∗⌊ki⌋
⌊ki⌋可以除法分块
对于⌊ki⌋相同的一部分,可以用等差数列求和公式来求
假设在相同的一块内⌊ki⌋=x,把 x 提出来那一块的答案就是x∗(i+i+1+⋯)
里面是差为1的等差数列,所以就可以用等差数列求和公式
code
#include<cstdio> #include<algorithm> using namespace std; typedef long long ll; int main() { ll n,k; scanf("%lld%lld",&n,&k); ll ans=n*k; for(ll l=1,r;l<=n;l=r+1) { if(k/l!=0) r=min(k/(k/l),n); else r=n; ans-=(k/l)*(r-l+1)*(l+r)/2; } printf("%lld",ans); return 0; }
相关文章推荐
- [bzoj1257][CQOI2007]余数之和sum
- bzoj 1257: [CQOI2007]余数之和sum 数学
- BZOJ 1257: [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
- bzoj1257 [CQOI2007]余数之和sum
- BZOJ 1257: [CQOI2007]余数之和sum
- bzoj 1257 [CQOI2007]余数之和sum 数学,分段优化
- 【分块】BZOJ 1257 [CQOI2007]余数之和sum题解
- bzoj1257 [CQOI2007]余数之和sum
- BZOJ 1257 [CQOI2007]余数之和sum | 数论
- [BZOJ 1257] [CQOI2007] 余数之和sum 【数学】
- bzoj1257: [CQOI2007]余数之和sum
- Bzoj1257 [CQOI2007]余数之和sum
- 【BZOJ】1257 [CQOI2007]余数之和sum 公式变形