=== ===
这里放传送门
=== ===
题解
这题代码长度感人。。
题目写成柿子就是
∑i=1nkmodi
把取模运算展开变成
∑i=1nk−⌊ki⌋
把
k
提出来就是
最后一段就可以用分块枚举除法的方法来做了。
代码
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long n,k,ans;
long long sum(long long i){
return (i*(i+1))>>1;
}
int main()
{
scanf("%I64d%I64d",&n,&k);
for (int i=1,j=0;i<=min(n,k);i=j+1){
j=k/(k/i);
if (j>n) j=n;
ans+=(k/i)*(sum(j)-sum(i-1));
}
ans=n*k-ans;
printf("%I64d\n",ans);
return 0;
}