@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@

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

posted @ 2020-03-09 09:29  Tiw_Air_OAO  阅读(120)  评论(0编辑  收藏  举报