bzoj4173:数学

来源:互联网 发布:昆山仁宝网络怎么样 编辑:程序博客网 时间:2024/05/21 10:24

bzoj4173:数学


φ(n)φ(m)kφ(k)e(m%k+n%kk)
这玩意儿一眼不可做的感觉,
我们现在的任务是求出一个玩意儿,使得他与e(m%k+n%kk)相同。
我们不妨设n=q1k+r1,m=q2k+r2
那么我们要构造的东西需要满足
{1 if r1+r2k0 if r1+r2<k
我们发现(n+m)=(q1+q2)k+(r1+r2)
这东西将r1r2结合在了一起.
最后构造出的东西显然就是
n+mknkmk
我们最后要求的就变成了φ(n)φ(m)kφ(k)(n+mknkmk)
不难发现f(n)=ni=1φ(i)ni=ni=1d|iφ(d)=ni=1i
最后的式子就变成了φ(n)φ(m)(f(n+m)f(n)f(m))
这三个f加加减减就变成了φ(n)φ(m)nm
剩下的东西就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;}
1 0