题目在这里呀!
题解
一道会杜教筛或者分块的人都应该会写的题啦。
首先考虑简单简单版:
∑i=1n⌊ni⌋
这个问题我们直接对 ⌊ni⌋ 分块即可。
那么很好转换到这个问题,
∑i=1nnmodi=∑i=1n(n−⌊ni⌋∗i)
所以就是上面那个问题啦w(数学公式写得有点懵qwq)
//Suplex
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int n,k,next;
long long ans;
int main()
{
scanf("%d%d",&n,&k);
if(n>k){ans=(long long)(n-k)*k;n=k;}
ans+=(long long)n*k;
for(int i=1;i<=n;i=next+1){
int now=k/i;
next=k/now;
if(next>n) next=n;
ans=ans-((long long)now*(long long)(i+next)* (long long)(next-i+1)/2);
}
printf("%lld\n",ans);
return 0;
}