【欧拉函数】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 }

 

 

          

转载于:https://www.cnblogs.com/iiyiyi/p/5918373.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值