Description
Input
输入文件的第一行输入两个正整数 。
Output
如题
Sample Input
5 6
Sample Output
240
HINT
N,M<=10^15
分析
我们可以转换一下条件 m%k + n%k >= k等价于
⌊n+mk⌋−⌊nk⌋ −⌊mk⌋=1
无视掉前面的φ(n)∗φ(m)的话答案就是
∑i=1n+mϕ(i)∗⌊n+mk⌋−∑i=1nϕ(i)∗⌊nk⌋−∑i=1mϕ(i)∗⌊mk⌋
我们由定理 ∑k|iϕ(k)=i 易得出上式可化简为 n∗m ,那么答案就为 ϕ(n)∗ϕ(m)∗n∗m 。
代码
#include <bits/stdc++.h>
#define MOD 998244353
#define ll long long
ll read()
{
ll x = 0;
ll f = 1;
char ch = getchar();
while (ch < '0' || ch > '9')
{
if (ch == '-')
f = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9')
{
x = x * 10 + ch - '0';
ch = getchar();
}
return x * f;
}
ll phi(ll n)
{
ll tmp = n;
for (ll i = 2; i * i <= n; i++)
{
if (n % i == 0)
{
tmp /= i;
tmp *= i - 1;
while (n % i == 0)
n /= i;
}
}
if (n != 1)
tmp /= n, tmp *= n - 1;
return tmp;
}
int main()
{
ll n,m;
n = read();
m = read();
std::cout<<(phi(n) % MOD) * (phi(m) % MOD) % MOD * (n % MOD) % MOD * (m % MOD) % MOD<<std::endl;
}