bzoj4173:数学

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;
}
posted @ 2017-01-17 19:52  DraZxlnDdt  阅读(134)  评论(0编辑  收藏  举报