zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    第一次作业
    java基础随笔09
    java基础随笔08
    java基础随笔07
    java基础随笔06
    java基础随笔05
    java基础随笔04
    java基础随笔03
    java基础随笔02
    java基础随笔01
  • 原文地址:https://www.cnblogs.com/jungu/p/13433666.html
Copyright © 2011-2022 走看看