题目
传送门:QWQ
分析
大佬和我说本题是除法分块,莫比乌斯反演中也有用到。
QwQ我不会莫比乌斯反演啊~
题目让我们求 $ sum_{i=1}^n kmod n $
然后根据$ a mod b = a - left lfloor frac{a}{b} ight floor imes b$
原式就变成了$ n*k - sum_{i=1}^n frac{k}{i} imes i$
发现$ frac{k}{i} $在一定范围内是不变的,然后计算一下就能$ O(sqrt{n}) $内解决了
代码
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 int main() 5 { 6 ll n,k,ans; 7 scanf("%lld%lld",&n,&k); ans=n*k; 8 for(ll l=1,r;l<=n;l=r+1){ 9 ll t=k/l; 10 11 if(t) r=min(k/t,n); 12 else r=n; 13 ans-=(l+r)*(r-l+1)/2*t; 14 // printf("--- %lld %lld %lld ",l,r,(r-l+1)*(r-l)/2*t); 15 } 16 printf("%lld ",ans); 17 return 0; 18 }