题解 | 余数求和

[CQOI2007]余数之和SUM

https://ac.nowcoder.com/acm/contest/1022/B

这题其实就是求
这题和整除分块又有什么关系呢?
mod没有什么特殊的性质,所以我们将它展开来,就变成了
于是我们就看到了一个熟悉的形式,也就是整除分块的一般形式

再次改一下这个式子
那么和普通的整除分块有什么差别呢?

其实就是多了一个i

确实,就是多了一个i而已,只需要简单的化简一下,这个i就对我们的处理没有什么影响了

因为我们知道,对于一个整除分块,其中的每个值都是相同的,于是我们可以设

式子就化为了
也就是说,其实这个式子前半段是一个整除分块,后半段是一个首项为l,公差为1的等差数列

至此,我们就圆满的解决了这个问题,可以在的时间内解决本题

#include <bits/stdc++.h>

#define ll long long

ll n, k;
ll ans = 0;

int main() {
    scanf("%lld%lld", &n, &k);
    ans = n * k;
    for(int l = 1, r = 1; l <= n; l = r + 1) {
        if(k/l != 0) r = std::min(k / (k / l), n);
        else r = n;
        ans = ans - 1ll * ((r+l) * (k/l) * (r-l+1)) / 2;
    }
    printf("%lld\n", ans);
    return 0;
}
全部评论

相关推荐

Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务