请不要在意是哪篇题解,反正就是未按规定排版
(大佬们喷轻点)
题解如下:
提醒,双倍经验
此题与P2261 [CQOI2007]余数求和,完全一样,可尝试用本题代码去提交此题代码
解题思路(进入正题)
打过高精取模的都知道
∑i=1nk%i=n∗k−∑i=1ni∗⌊ik⌋
然后用分块解决就好了。
注意本组有多组数据。
然后代码就很简单了。
AC代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,k,ans;
int main(){
while(~scanf("%lld%lld",&n,&k)){
ans=n*k;
for(ll l=1,r=0;l<=n;l=r+1){
if(k/l!=0) r=min(k/(k/l),n);
else r=n;
ans-=(k/l)*(r-l+1)*(l+r)/2;
}
printf("%lld\n",ans);
}
}