正解太神辣,打表可以发现是求好多个等差数列,但是从那个结论写的话,起码要5、60行,然而从先求出 nk,然后一步一步减,代码就3行!!
∑Kmodi
=∑K−⌊Ki⌋∗i
=nK−∑⌊K/i⌋∗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);
}