1 条题解

  • 0
    @ 2025-10-8 17:03:28

    G33 整除分块(数论分块)

    /*
    F(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n
    因 k mod i=k-(k/i)*i
    故 F(n, k)=n*k -  ∑[k/i]*i
    故分块加速求 ∑[k/i]*i 即可 
    */
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    int main()
    {
        LL n, k;scanf("%lld%lld", &n, &k);
        LL ans=0;
        for(LL l=1, r;l<=n;l=r+1)
        {
        	if(k/l==0) break; 
        	r=min(k/(k/l), n);
        	ans+=((r-l+1)*(l+r)/2)*(k/l);
        }
        printf("%lld\n", n*k-ans);
        return 0;
    }
    
    • 1

    G33*【一维除法分块加速】[CQOI2007] 余数求和

    信息

    ID
    2910
    时间
    1000ms
    内存
    128MiB
    难度
    5
    标签
    递交数
    100
    已通过
    35
    上传者