欧拉函数&欧拉定理&莫比乌斯函数

欧拉函数

定义

\(\varphi(n)\)表示的是小于等于n且和n互质的数的个数。

\(especailly,\) \(\varphi(1)=1\)

\(for\) \(a\) 质数\(n,\) \(obviously,\varphi(n)=n-1\)

性质

一.\(it\) \(is\) \(a\) 积性函数

二.\(n=\sum\limits_{d|n}\varphi(d)\)

三.设\(n=\prod^n_{i=1}p_i^{k_i}\),其中\(p_i\)皆为质数,则有\(\varphi(n)=n\times\prod_{i=1}^n \frac{p_i-1}{p_i}\)

求法

对于一个数n,根据第三条性质

int get_one_phi(int n) {
  int m = sqrt(n);
  int ans = n;
  for (int i=2;i*i<=n;i++)
    if(!n%i){
      ans=ans/i*(i-1);
      while(n%i==0)n/=i;
    }
  if(n>1)ans=ans/n*(n-1);
  return ans;
}

线性推

void get_all_phi(){
	for(int i=2;i<=n;i++){
		if(!vis[i]) prim[++pn]=i,phi[i]=i-1;
		for(int j=1;j<=pn&&i*prim[j]<=n;j++){
			vis[i*prim[j]]=1;
			if(i%prim[j]==0){
				phi[i*prim[j]]=phi[i]*prim[j];
				break;
			}
			else phi[i*prim[j]]=phi[i]*(prim[j]-1);
		}
	}
} 

欧拉定理

what is it?

\(gcd(a,m)=1\),则\(a^{\varphi(m)}\equiv1 (mod\) \(m)\)

没错就是这样简易

deeper?

\( \begin{cases} a^b\equiv a^{b\text{ mod }\varphi(m)} \text{ mod m } \text{ gcd(a,m)=1}\\ \\ a^b\equiv a^{b\text{ mod }\varphi(m)+\varphi(m)} \text{ mod m} \text{ gcd(a,m)}\neq1 \end{cases}\)

莫比乌斯函数

定义

\(\mu(n)= \begin{cases} 1,n=1\\ (-1)^k,n=p_1\times p_2\times ···p_k\\ 0,\text{the others} \end{cases}\)

性质

一.若\(gcd(a,b)=1\),则\(\mu(ab)=\mu(a)\times\mu(b)\)

二.\([n==1]=\sum\limits_{d|n}\mu(d)\)

三.\(\sum\limits_{d|n}\frac{\mu(d)}{d}=\frac{\varphi(n)}{n}\)

四.【莫比乌斯反演】若\(g(n)=\sum\limits_{d|n}f(d)\),则\(f(n)=\sum\limits_{d|n}\mu(\frac n d)\times g(d)\)

求法

单个大体如上
线性筛

void get_all_mu(){
	mu[1]=1;
	for(int i=2;i<=1e7;i++){
		if(!v[i])mu[i]=-1,p[++tot]=i;
		for(int j=1;j<=tot&&i<=1e7/p[j];j++){
			v[i*p[j]]=1;
			if(i%p[j]==0){
				mu[i*p[j]]=0;
				break;
			}
			mu[i*p[j]]=-mu[i];
		}
	}
}
posted @ 2021-01-09 20:55  Realityang  阅读(188)  评论(0编辑  收藏  举报