bzoj4173:数学
求
φ(n)∗φ(m)∗∑kφ(k)∗e(m%k+n%k≥k)
这玩意儿一眼不可做的感觉,
我们现在的任务是求出一个玩意儿,使得他与
e(m%k+n%k≥k)
相同。
我们不妨设
n=q1k+r1,m=q2k+r2
那么我们要构造的东西需要满足
{1 if r1+r2≥k0 if r1+r2<k
我们发现
(n+m)=(q1+q2)k+(r1+r2)
这东西将
r1,r2
结合在了一起.
最后构造出的东西显然就是
⌊n+mk⌋−⌊nk⌋−⌊mk⌋
我们最后要求的就变成了
φ(n)∗φ(m)∗∑kφ(k)∗(⌊n+mk⌋−⌊nk⌋−⌊mk⌋)
不难发现
f(n)=∑ni=1φ(i)∗⌊ni⌋=∑ni=1∑d|iφ(d)=∑ni=1i
最后的式子就变成了
φ(n)∗φ(m)∗(f(n+m)−f(n)−f(m))
这三个
f
加加减减就变成了
剩下的东西就so easy了
#include<cstdio>
#include<algorithm>
typedef long long ll;
const int Mod = 998244353;
ll n, m;
ll phi (ll x) {
ll ans = x;
for (int i = 2; 1ll * i * i <= x; ++i) if (x % i == 0) {
ans = ans / i * (i - 1);
while (x % i == 0) x /= i;
}
if (x != 1) ans = ans / x * (x - 1);
return ans % Mod;
}
int main () {
scanf ("%lld%lld", &n, &m);
printf ("%lld\n", phi (n) * phi (m) % Mod * (n % Mod) % Mod * (m % Mod) % Mod);
return 0;
}