其他分享
首页 > 其他分享> > 洛谷 - P2261 - 余数求和

洛谷 - P2261 - 余数求和

作者:互联网

https://www.luogu.org/problemnew/show/P2261

看了一下题解,取模运算可以换成减法来做。 $a\%b=a-b*\lfloor\frac{a}{b}\rfloor$ ,所以求和式可以化简,然后用数论分块来搞。

#include<bits/stdc++.h>
using namespace std;
#define ll long long

int main() {
    ll n,k;
    scanf("%lld%lld",&n,&k);
    ll ans=n*k;
    for(ll l=1,r; l<=n; l=r+1) {
        if(k/l!=0) {
            r=min(k/(k/l),n);
        } else {
            //k/l==0,意味着l>k,所有的后面的下整都是0,分成同一块
            r=n;
            break;
        }
        ans-=(k/l)*(r-l+1)*(l+r)/2;
    }
    printf("%lld",ans);
    return 0;
}

 

标签:洛谷,求和,P2261,long,ans,余数,ll,lld
来源: https://www.cnblogs.com/Yinku/p/10538859.html