题目描述
题解
∑i=1nKmodi
=∑i=1nK−⌊Ki⌋∗i
=nK−∑i=1n⌊Ki⌋∗i
咦有点眼熟
和约数研究那道题有点像,在求和的时候运用一下等差数列的求和公式即可。
我太煞笔了看了半天不懂什么意思,原来那是等差数列的求和公式,还百度一下如何推导。。。
代码
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define LL long long
LL n,k,ans;
int main(){
scanf("%lld%lld",&n,&k);
ans=n*k;
if (n>k) n=k;
LL j=0;
for(int i=1;i<=n;i=j+1){
j=min(n,k/(k/i));
ans-=(k/i)*(j-i+1)*(i+j)/2;
}
printf("%lld\n",ans);
}