嘘~ 正在从服务器偷取页面 . . .

洛谷P2261 [CQOI2007]余数求和 题解


洛谷P2261 [CQOI2007]余数求和 题解

题目链接:P2261 [CQOI2007]余数求和

题意

给定 $n,k$ ,求

数据范围

$1 \le n,k \le 10^9$ 。

考虑数论分块

注意到

若 $k < n$ ,显然 $\forall i > k$ 有 $\left\lfloor\dfrac{k}{i}\right\rfloor=0$

故可直接计算

若 $k \ge n$ ,则判断一下右边界不要超过 $n$ 即可

时间复杂度 $\mathcal{O}(\sqrt{n})$

代码如下

#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,k;
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin >> n >> k;int res=n*k;
    for(int l=1,r; l<=min(k,n); l=r+1)
    {
        r=min(k/(k/l),n);
        res-=(k/l)*(r-l+1)*(l+r)/2;
    }
    cout << res << endl;
    return 0;
}

文章作者: q779
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 q779 !
评论
  目录