4173: 数学
Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 460 Solved: 226
[Submit][Status][Discuss]
Description
Input
输入文件的第一行输入两个正整数 。
Output
如题
Sample Input
Sample Output
HINT
N,M<=10^15
Source
分析:
$m \mod k+n \mod k>=k$可以转化为以下的式子...
$n-\left \lfloor \frac{n}{k} \right \rfloor*k+m-\left \lfloor \frac{m}{k} \right \rfloor*k>=k$
$n+m-k*( \left \lfloor \frac{n}{k} \right \rfloor+\left \lfloor \frac{m}{k} \right \rfloor )>=k$
$\left \lfloor \frac{n+m}{k} \right \rfloor-\left \lfloor \frac{n}{k} \right \rfloor-\left \lfloor \frac{m}{k} \right \rfloor>=1$
也就是$\left \lfloor \frac{n+m}{k} \right \rfloor-\left \lfloor \frac{n}{k} \right \rfloor-\left \lfloor \frac{m}{k} \right \rfloor=1$
$\sum_ {\left \lfloor \frac{n+m}{k} \right \rfloor-\left \lfloor \frac{n}{k} \right \rfloor-\left \lfloor \frac{m}{k} \right \rfloor=1} \phi(k)$
$=\sum_ {k=1}^{n+m} \phi(k)*\left\lfloor \frac{n+m}{k} \right \rfloor-\sum_ {k=1}^{n} \phi(k)*\left\lfloor \frac{n}{k} \right \rfloor-\sum_ {k=1}^{m} \phi(k)*\left\lfloor \frac{m}{k} \right \rfloor$
然后我们看$\sum_ {k=1}^{n} \phi(k)*\left\lfloor \frac{n}{k} \right \rfloor$是什么...
因为一个数的因子的欧拉函数之和为它本身...所以可以有以下的式子...
$\sum_ {k=1}^{n} \phi(k)*\left\lfloor \frac{n}{k} \right \rfloor=\sum_ {i=1}^{n} \sum_ {k\mid i} \phi(k)=\sum_ {i=1}^{n} i$
那么答案就是$\phi(n)*\phi(m)*n*m$...
代码:
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
//by NeighThorn
#define int long long
using namespace std;
int n,m,mod=998244353;
inline int phi(int x){
int ans=x,y=sqrt(x);
for(int i=2;i<=y;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;
}
signed main(void){
scanf("%lld%lld",&n,&m);
int ans=phi(n)*phi(m)%mod*(n%mod)%mod*(m%mod)%mod;
printf("%lld\n",ans);
return 0;
}
By NeighThorn