luogu P2261 [CQOI2007]余数求和 |数论分块
题目描述
给出正整数 \(n\) 和 \(k\),请计算
\(G(n, k) = \sum_{i = 1}^n k \bmod i\)
其中 \(k\bmod i\) 表示 \(k\) 除以 \(i\) 的余数。
输入格式
输入只有一行两个整数,分别表示 \(n\) 和 \(k\)。
输出格式
输出一行一个整数表示答案。
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
#define int long long
const int N=1e6+5;
signed main(){
int n,k; cin>>n>>k;
int ans=0;
if(n>k)ans=(n-k)*k,n=k;
ans+=n*k;
for(int l=1,r=0;l<=n;l=r+1){
r=min(k/(k/l),n);
ans-=(k/r)*(r-l+1)*(l+r)/2;
}
cout<<ans<<endl;
}
不以物喜,不以己悲
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步