【欧拉函数】BZOJ4173-数学
【题目大意】
【思路】
基本是popoqqq大爷的题解,稍微添加了几句自己的注释,方便理解
同理,如果n%k+m%k<k等价于0
=∑([(n+m)/k]-[n/k]-[m/k])×φ(k) ……因为k不满足条件的时候前面为0
……其实右边两个∑也是k=1..(m+n),但是k>n的时候,[n/k]显然为0,m同理。
【错误点XXXXD】
……程序烧杯,po也是烧杯。不要忘了ll,不要忘了MOD……
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #define MOD 998244353 6 using namespace std; 7 typedef long long ll; 8 9 ll phi(ll x) 10 { 11 ll ret=x; 12 for (ll i=2;i*i<=x;i++) 13 { 14 if (x%i==0) 15 { 16 ret-=ret/i; 17 while (x%i==0) x/=i; 18 } 19 } 20 if (x>1) ret-=ret/x; 21 return ret%MOD; 22 } 23 24 void solve() 25 { 26 ll n,m; 27 scanf("%lld%lld",&n,&m); 28 printf("%lld",(phi(n)%MOD)*(phi(m)%MOD)%MOD*(n%MOD)%MOD*(m%MOD)%MOD); 29 } 30 31 int main() 32 { 33 solve(); 34 return 0; 35 }