Description
给出n,k,求
∑i=1nkmodi
n,k<=10^9
Solution
又是一道水题。(最近比较颓)
所以说嘛,做人呢,还是需要一定的姿势水平,像我这种蒟蒻呀,就只能不断地用手划水。
看着%不爽,拆成
∑i=1nk−⌊ki⌋∗i
然后就可以愉快的分块了。(分块大法好!)
Code
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
ll ans;
int n,k,mx;
int main() {
scanf("%d%d",&n,&k);ans=(ll)n*k;mx=min(n,k);
for(int l=1,r;l<=mx;l=r+1) r=min(k/(k/l),mx),ans-=(ll)(l+r)*(r-l+1)/2*(k/l);
printf("%lld",ans);
}