1 solutions

  • 0
    @ 2024-12-18 14:13:27

    $\sum_{i=1}^nk\ mod\ i=n \times k-\sum_{i=1}^n⌊k/i⌋*i$

    ⌊k/i⌋ 最多只有2k\sqrt k个值

    分段讨论: 当i<= k\sqrt k 时,因为ii是1到 k\sqrt k 的整数,所以最多只有 k\sqrt k个不同的k/i⌊k/i⌋值。

    ii> k\sqrt k 时,k/i⌊k/i⌋<= k\sqrt k下,又因为式子取整了,所以式子只能取1 到 k\sqrt k 的整数,故最多也只有 k\sqrt k个不同的⌊k/i⌋值。 综上所述,k/i⌊k/i⌋最多只有 2k\sqrt k月个取值

    假设我们知道一段相同取值的下界是 xx,若能求出上界,我们问题便解决了。

    若下界是 xx,上界是 r=k/k/xr=⌊k/⌊k/x⌋⌋ ps:证明稍微有点麻烦可以自己研究下

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    int main()
    {
        LL n,k;
        cin>>n>>k;
        LL ans=n*k;
        for(int i=1;i<=n;)
        {
            LL x=k/i; //计算i的贡献的次数
            if(x==0) break; //后面都没有贡献了
            LL y=min(k/x,n); //计算当前k/i=x的最远的点
            ans-=x*(i+y)*(y-i+1)/2; // 计算这段的和
            i=y+1; //跳到下一个区间
        }
        cout<<ans;
        return 0;
    }
    
    • 1

    Information

    ID
    2128
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    10
    Tags
    # Submissions
    1
    Accepted
    1
    Uploaded By