BZOJ 4173 数学 数论

题目大意:给定 n,m ,求 φ(n)φ(m)n%k+m%kkφ(k) mod 998244353
n,m1015

我是傻逼。。。

n%k+m%kk 等价于 n+mknkmk=1
无视掉前面的 φ(n)φ(m) 的话答案就是
n%k+m%kkφ(k)
=n+mk=1φ(k)n+mknk=1φ(k)nkmk=1φ(k)mk

那么 nk=1φ(k)nk 又是什么呢?
ni=1i=ni=1k|iφ(k)=nk=1φ(k)nk

因此答案为 φ(n)φ(m)(n+mi=1ini=1imi=1i)=φ(n)φ(m)nm

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MOD 998244353
using namespace std;
long long n,m;
long long Phi(long long n)
{
    long long i,re=n;
    for(i=2;i*i<=n;i++)
        if(n%i==0)
        {
            re/=i;re*=i-1;
            while(n%i==0)
                n/=i;
        }
    if(n!=1) re/=n,re*=n-1;
    return re;
}
int main()
{
    cin>>n>>m;
    cout<<(Phi(n)%MOD)*(Phi(m)%MOD)%MOD*(n%MOD)%MOD*(m%MOD)%MOD<<endl;
    return 0;
}

你可能感兴趣的:(数论,bzoj,BZOJ4173)