题目
题目大意:
给出正整数\(n,k\),求\(\Sigma_{i=1}^{n}{k \bmod i}\)
代码
乍一看只能暴力,其实稍微修改下就变成了数论分块。
\(\Sigma_{i=1}^{n}{k \bmod i}=\Sigma_{i=1}^{n}{\lfloor{\frac{k}{i}}\rfloor} \times i\)
然后就比一般的整除分块只是多了一个i,套板子就行了。
#include <iostream>
using namespace std;
typedef long long ll;
ll n,k,ans;
int main() {
cin>>n>>k;
ans=k*n;
ll r,len;
for(int l=1;l<=n;l=r+1) {
if(k/l==0) {
r=n;
continue;
}
r=min(n,k/(k/l)),len=r-l+1;
ans-=(l+r)*len/2*(k/l);
}
cout<<ans;
return 0;
}
原文地址:https://www.cnblogs.com/wyc06/p/12651299.html
时间: 2024-10-07 20:12:17