bzoj4173 数学

2022-09-19 08:21:54 浏览数 (1)

Description

题目链接:bzoj4173

组成的集合,求

phi(n)times phi(m)times sum_{kin S(n,m)}phi(k)bmod 998244353

Solution

重点是看后面的那个式子怎么化:

sum_{kin S(n,m)}phi(k)=sum_{nbmod k mbmod k ge k} phi(k)

然后注重这个

,则有:

r1 r2=nbmod k mbmod kge k

由于 ,则:

(n m)-(q1 q2)times k = r1 r2 ge k

两边同除 得:

lfloor frac{n m}{k}rfloor-lfloor frac{n}{k}rfloor-lfloor frac{m}{k}rfloor=1

所以:

begin{align}sum_{nbmod k mbmod k ge k} phi(k)&=sum_{k=1}^{n m}phi(k)times[lfloor frac{n m}{k}rfloor-lfloor frac{n}{k}rfloor-lfloor frac{m}{k}rfloor=1]\&=sum_{k=1}^{n m}phi(k)times(lfloor frac{n m}{k}rfloor-lfloor frac{n}{k}rfloor-lfloor frac{m}{k}rfloor)\&=sum_{k=1}^{n m}phi(k)timeslfloor frac{n m}{k}rfloor-sum_{k=1}^{n m}phi(k)timeslfloor frac{n}{k}rfloor-sum_{k=1}^{n m}phi(k)timeslfloor frac{m}{k}rfloor\&=sum_{k=1}^{n m}phi(k)timeslfloor frac{n m}{k}rfloor-sum_{k=1}^{n}phi(k)timeslfloor frac{n}{k}rfloor-sum_{k=1}^{m}phi(k)timeslfloor frac{m}{k}rfloor\&=sum_{k=1}^{n m}i-sum_{k=1}^{n}i-sum_{k=1}^{m}i\&=frac{(n m)times(n m-1)}{2}-frac{ntimes(n-1)}{2}-frac{mtimes(m-1)}{2}\&=ntimes mend{align}
phi(n)times phi(m)times sum_{kin S(n,m)}phi(k)=phi(n)times phi(m)times ntimes m

直接搞就好了。

Code

代码语言:javascript复制
#include<bits/stdc  .h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define W while
#define I inline
#define RI register int
#define int long long
#define Cn const
#define CI Cn int&
#define gc getchar
#define D isdigit(c=gc())
#define pc(c) putchar((c))
#define min(x,y) ((x)<(y)?(x):(y))
#define max(x,y) ((x)>(y)?(x):(y))
using namespace std;
namespace Debug{
    Tp I void _debug(Cn char* f,Ty t){cerr<<f<<'='<<t<<endl;}
    Ts I void _debug(Cn char* f,Ty x,Ar... y){W(*f!=',') cerr<<*f  ;cerr<<'='<<x<<",";_debug(f 1,y...);}
    Tp ostream& operator<<(ostream& os,Cn vector<Ty>& V){os<<"[";for(Cn auto& vv:V) os<<vv<<",";os<<"]";return os;}
    #define gdb(...) _debug(#__VA_ARGS__,__VA_ARGS__)
}using namespace Debug;
namespace FastIO{
    Tp I void read(Ty& x){char c;int f=1;x=0;W(!D) f=c^'-'?1:-1;W(x=(x<<3) (x<<1) (c&15),D);x*=f;}
    Ts I void read(Ty& x,Ar&... y){read(x),read(y...);}
    Tp I void write(Ty x){x<0&&(pc('-'),x=-x,0),x<10?(pc(x '0'),0):(write(x/10),pc(x '0'),0);}
    Tp I void writeln(Cn Ty& x){write(x),pc('n');}
}using namespace FastIO;
Cn int N=1e5,p=998244353;
int n,m;
I int phi(RI m){
    RI i,S=m;for(i=2;i*i<=m;i  ) if(!(m%i)){
        S=S/i*(i-1);W(!(m%i)) m/=i;
    }if(m>1) S=S/m*(m-1);return S%p;
}
signed main(){return read(n,m),writeln(phi(n)*phi(m)%p*(n%p)%p*(m%p)%p),0;}

0 人点赞