#3138 [CQOI2007]余数求和
题面
给出正整数nnn和kkk,计算G(n,k)=kmod1+kmod2+kmod3+…+kmodnG(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod nG(n,k)=kmod1+kmod2+kmod3+…+kmodn的值,其中kmodik mod ikmodi表示kkk除以iii的余数。例如G(10,5)=5mod1+5mod2+5mod3+5mod4+5mod5……+5mod10=0+1+2+1+0+5+5+5+5+5=29G(10, 5)=5 mod 1 + 5 mod 2 + 5 mod 3 + 5 mod 4 + 5 mod 5 …… + 5 mod 10=0+1+2+1+0+5+5+5+5+5=29G(10,5)=5mod1+5mod2+5mod3+5mod4+5mod5……+5mod10=0+1+2+1+0+5+5+5+5+5=29
20%: n,k <= 1000
40%: n,k <= 10^6
100% n,k <= 10^9
输入
输入格式: 两个整数n k
输出
答案
样例输入
10 5
样例输出
29
SOL
直接整除分块就行,看代码。
代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k,ans;
signed main(){
scanf("%lld%lld",&n,&k);
ans=n*k;
for(int register l=1,r;l<=n;l=r+1){
if(k/l)r=min(k/(k/l),n);
else r=n;
ans-=(k/l)*(r-l+1)*(l+r)>>1;
}
printf("%lld",ans);
return 0;
}