• ACwing 199 约数之和


    题意:

    给出正整数$n$和$k$,计算$k mod 1 + k mod 2 + k mod 3 + … + k mod n$的值。

    思路:

    已知$k mod n = k - k / n * n$,因此答案要求$n * k - k / 1 * 1 - k / 2 * 2 - ... - k / n * n$,用整数分块即可

    Code:

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    typedef long long ll;
    
    #define sd(a) scanf("%d", &a)
    #define sdd(a, b) scanf("%d%d", &a, &b)
    
    int n, k, en;
    ll ans;
    
    void solve(){
        sdd(n, k);
        ans = (ll)n * k;
        for(int i = 1; i <= min(n, k); i = en + 1){
            en = min(n, k / (k / i));
            ll p = en - i + 1;
            ans -= k / i * (p * i + p * (p - 1) / 2);
        }
        printf("%lld
    ", ans);
        
    }
    
    int main(){
        int T = 1;
        // sd(T);
        while(T --){
            solve();
        }
        
        return 0;
    }
  • 相关阅读:
    mysql基本用法
    linux基本指令
    servlet的生命周期
    day 15 笔记
    day 14 作业
    考试二
    day 14
    day 12 zuoye
    day 13
    day 12
  • 原文地址:https://www.cnblogs.com/jungu/p/13433666.html
Copyright © 2020-2023  润新知