知识
整除分块加上取模转换
解
首先a%b = a - [a/b] (下取整) * b
没问题吧
之后对于
∑
i
=
1
n
k
m
o
d
i
\sum_{i=1}^{n}kmodi
i=1∑nkmodi
是不是就可以化成
n
∗
k
−
∑
i
=
1
n
i
∗
k
/
i
n * k - \sum_{i=1}^{n} i*k/i
n∗k−∑i=1ni∗k/i 下取整
之后右边的那个是不是整除分块加上等差数列,是不是就解决了
coding time
#include<bits/stdc++.h>
using namespace std;
int main(){
long long n , k;
scanf("%lld%lld",&n,&k);
long long ans = n * k;
for(long long l = 1 , r ; l <= n ; l = r + 1){
if(k / l != 0)r = min(k / (k / l) , n);
else r = n;
ans -= (r - l + 1) * (k / l) * (l + r) / 2;
}
cout<<ans<<endl;
return 0;
}