记录编号 571093 评测结果 AAAAAAAAAA
题目名称 [清华集训 2012] 模积和 最终得分 100
用户昵称 Gravatarlihaoze 是否通过 通过
代码语言 C++ 运行时间 0.002 s
提交时间 2022-05-07 10:39:52 内存使用 1.18 MiB
显示代码纯文本
#include <bits/stdc++.h>
#define OPEN(_x) freopen(#_x".in", "r", stdin); freopen(#_x".out", "w", stdout)
#define rep(_x, _y, _z) for (int _x = (_y); _x <= (_z); ++ _x)

using i64 = long long;

const i64 MOD = 19940417;
const i64 inv2 = 9970209, inv6 = 3323403;

i64 s(i64 l, i64 r) { return (r * (r + 1) % MOD - l * (l - 1) % MOD) % MOD * inv2 % MOD; }
i64 S(i64 n) { return n * (n + 1) % MOD * (n + n + 1) % MOD * inv6 % MOD; }

i64 C(i64 n, i64 k) {
    i64 res = 0, l = 1, r;
    while (l <= n) {
        r = std::min(k / (k / l), n);
        res = (res + (k / l) * s(l, r) % MOD) % MOD;
        l = r + 1;
    }
    return res % MOD;
}

i64 C_2(i64 n, i64 k1, i64 k2) {
    i64 res = 0, l = 1, r; 
    while (l <= n) {
        r = std::min(k1 / (k1 / l), k2 / (k2 / l));
        res = (res + (k1 / l) * (k2 / l) % MOD * (S(r) - S(l - 1))) % MOD;
        l = r + 1;
    }
    return res % MOD;
}

i64 f(i64 n) { return (n * n - C(n, n)) % MOD; }

i64 n, m;
i64 res;

int main() {
    OPEN(modmuladd);
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cin >> n >> m;
    if (n > m) std::swap(n, m);
    res = f(n) * f(m) % MOD;
    res = (res + n * C(n, m) + m * C(n, n)) % MOD;
    res = (res - n * n % MOD * m) % MOD;
    res = (res - C_2(n, n, m)) % MOD;
    std::cout << (res % MOD + MOD) % MOD << '\n';
    return 0;
}