@bzoj - 4173@ 数学


@description@

设 S(n, m) 为满足 m mod k + n mod k >= k 的所有整数 k 组成的集合。求:
\[\phi(n)\times \phi(m)\times \sum_{k\in S(n, m)}\phi(k) \mod 998244353\]

原题传送门。

@solution@

对不起,我没学过数论.jpg。

两种方法。一种是猜想它有规律,打表发现原式为 \(\phi(n) \times \phi(m) \times n \times m\)

另一种采用严谨推导。首先 mod 不好办,转成向下取整:
\[ m - \lfloor \frac{m}{k} \rfloor k + n - \lfloor \frac{n}{k} \rfloor k \geq k\\ \lfloor\frac{n+m}{k}\rfloor - \lfloor \frac{m}{k} \rfloor - \lfloor \frac{n}{k} \rfloor \geq 1 \]

又因为显然有 \(\lfloor\frac{n+m}{k}\rfloor - \lfloor \frac{m}{k} \rfloor - \lfloor \frac{n}{k} \rfloor = 0 或 1\),所以 \(\lfloor\frac{n+m}{k}\rfloor - \lfloor \frac{m}{k} \rfloor - \lfloor \frac{n}{k} \rfloor = 1\)

代回去推导:
\[ \sum_{k\in S(n, m)}\phi(k) = \sum(\lfloor\frac{n+m}{k}\rfloor - \lfloor \frac{m}{k} \rfloor - \lfloor \frac{n}{k} \rfloor)\phi(k)\\ = \sum\lfloor\frac{n+m}{k}\rfloor\phi(k) - \sum\lfloor\frac{n}{k}\rfloor\phi(k) - \sum\lfloor\frac{m}{k}\rfloor\phi(k) \]

考虑 \(\sum\lfloor\frac{n}{k}\rfloor\phi(k) = \sum_{k=1}^{n}(\phi * I)(k) = \sum_{k=1}^{n}k = \frac{n(n +1)}{2}\)(一个有关 \(\phi\) 的经典狄利克雷卷积式)。

那么代回去直接得到结果为 \(n\times m\),因此打表出来的结论正确。

@accepted code@

#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;

const int MOD = 998244353;

typedef long long ll;

ll phi(ll n) {
    ll ret = 1; int p = sqrt(n);
    for(int i=2;i<=p;i++)
        if( n % i == 0 ) {
            ret *= (i - 1), n /= i;
            while( n % i == 0 )
                ret *= i, n /= i;
        }
    if( n != 1 ) ret *= (n - 1);
    return ret;
}

int main() {
    ll N, M; scanf("%lld%lld", &N, &M);
    int A = 1LL * (phi(N) % MOD) * (phi(M) % MOD) % MOD;
    int B = 1LL * (N % MOD) * (M % MOD) % MOD;
    printf("%lld\n", 1LL * A * B % MOD);
}

@details@

话说这个优美的式子,有啥组合/数论意义吗?

猜你喜欢

转载自www.cnblogs.com/Tiw-Air-OAO/p/12446854.html