题意
给出正整数n和
1≤n,k≤109
思路
ans=∑i=1nk%i=∑i=1nk−⌊ki⌋×i=nk−∑i=1n⌊ki⌋×i
因为后面一项的前缀和可以维护,所以总的复杂度是O(n−√)
代码
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
long long res, n, k, last;
int main(){
scanf("%lld%lld", &n, &k);
res += n*k;
n = min(n, k);
for(long long i = 1; i <= n; i = last+1){
last = min(n, k/(k/i));
res -= (k/i)*(i+last)*(last-i+1)/2;
}
printf("%lld", res);
return 0;
}
本文介绍了一种计算从k%1到k%n所有余数之和的方法,通过数学推导简化了原始问题,并提供了一个高效的算法实现。适用于1≤n,k≤10^9的大规模输入。
422

被折叠的 条评论
为什么被折叠?



