也许更好的阅读体验

欧拉函数
  • 定义
    欧拉函数是 小于等于 x的数中与x 互质 的数的 数目
    符号 φ ( x ) \varphi(x) φ(x)
    互质 两个互质的数的最大公因数等于1,1与任何数互质

  • 通式
    φ ( x ) = x ∏ i = 1 n ( 1 − 1 p i ) \varphi(x)=x\prod_{i=1}^n(1-\frac{1}{p_i}) φ(x)=xi=1n(1pi1)
    其中 p i p_i pi x x x的质因子, n n n x x x的质因子个数


欧拉函数常用性质
  • n n n为质数,显然 φ ( n ) = n − 1 \varphi(n)=n-1 φ(n)=n1

  • 欧拉函数是积性函数
    积性函数: 对于任意 互质 的整数 a a a b b b有性质 f ( a b ) = f ( a ) ⋅ f ( b ) f(ab)=f(a)·f(b) f(ab)=f(a)f(b)的数论函数。
    m , n m,n m,n互质, φ ( m n ) = φ ( m ) ⋅ φ ( n ) \varphi(mn)=\varphi(m)·\varphi(n) φ(mn)=φ(m)φ(n)

  • 如果 x = 2 n x=2n x=2n( n n n为奇数), φ ( x ) = φ ( n ) \varphi(x)=\varphi(n) φ(x)=φ(n) φ ( 2 n ) = φ ( n ) \varphi(2n)=\varphi(n) φ(2n)=φ(n)( n n n为奇数)
    n为奇数时,n与2互质, φ ( 2 ) = 1 \varphi(2)=1 φ(2)=1

  • p p p为质数,则 φ ( p k ) = p k − p k − 1 \varphi(p^k)=p^k-p^{k-1} φ(pk)=pkpk1
    因为与 p k p^k pk不互质的只有 p p p的倍数,而 p k p^k pk p p p的倍数有 p k − 1 p^{k-1} pk1

  • x > 2 x>2 x>2时, φ ( x ) \varphi(x) φ(x)为偶数
    这一点需要了解更相减损术 即 g c d ( n , x ) = g c d ( n , n − x ) gcd(n,x)=gcd(n,n-x) gcd(n,x)=gcd(n,nx)
    由该公式我们可以知道,所有与 n n n互质的数都是成对出现的

  • 小于n的数中,与n互质的数的总和为 φ ( n ) ∗ n / 2    ( n > 1 ) \varphi(n)*n/2\ \ (n>1) φ(n)n/2  (n>1)
    由上面的证明(更相减损术)我们知道,每一对与 n n n互质的数的和为 n n n,共有 φ ( n ) / 2 \varphi(n)/2 φ(n)/2

  • n = ∑ d ∣ n φ ( d ) n=\sum_{d|n}\varphi(d) n=dnφ(d) n n n的因数 ( ( (包括 1 1 1和它自己 ) ) )的欧拉函数之和等于 n n n
    这条性质的运用又叫 欧拉反演
    定义函数
    f ( n ) = ∑ d ∣ n φ ( d ) \begin{aligned}f(n)=\sum_{d|n}\varphi(d)\end{aligned} f(n)=dnφ(d)

    • f ( n ) f(n) f(n)为积性函数
      f ( n ) ⋅ f ( m ) = ∑ i ∣ n φ ( i ) ∑ j ∣ m φ ( j ) = ∑ i ∣ n ∑ j ∣ m φ ( i ) ⋅ φ ( j ) = ∑ i ∣ n ∑ j ∣ m φ ( i ⋅ j ) = ∑ d ∣ n m φ ( d ) = f ( n m ) \begin{aligned}f(n)·f(m)=\sum_{i|n}\varphi(i)\sum_{j|m}\varphi(j)=\sum_{i|n}\sum_{j|m}\varphi(i)·\varphi(j)=\sum_{i|n}\sum_{j|m}\varphi(i·j)=\sum_{d|nm}\varphi(d)=f(nm)\end{aligned} f(n)f(m)=inφ(i)jmφ(j)=injmφ(i)φ(j)=injmφ(ij)=dnmφ(d)=f(nm)

    f ( p k ) = φ ( 1 ) + φ ( p ) + φ ( p 2 ) + ⋯ + φ ( p k ) = 1 + ( p − 1 ) + ( p 2 − p ) + ⋯ + ( p k − p k − 1 ) = p k f(p^k)=\varphi(1)+\varphi(p)+\varphi(p^2)+\cdots+\varphi(p^k)=1+(p-1)+(p^2-p)+\cdots+(p^k-p^{k-1})=p^k f(pk)=φ(1)+φ(p)+φ(p2)++φ(pk)=1+(p1)+(p2p)++(pkpk1)=pk

    n = p 1 k 1 ⋅ p 2 k 2 ⋅ ⋯ ⋅ p m k m n=p_1^{k_1} ·p_2^{k_2}· \cdots·p_m^{k_m} n=p1k1p2k2pmkm

    f ( n ) = f ( p 1 k 1 ) ⋅ f ( p 2 k 2 ) ⋅ ⋯ ⋅ f ( p m k m ) = p 1 k 1 ⋅ p 2 k 2 ⋅ ⋯ ⋅ p m k m = n f(n)=f(p_1^{k_1})·f(p_2^{k_2})·\cdots·f(p_m^{k_m})=p_1^{k_1} ·p_2^{k_2}· \cdots·p_m^{k_m}=n f(n)=f(p1k1)f(p2k2)f(pmkm)=p1k1p2k2pmkm=n


欧拉定理

a , m a,m a,m互质, a φ ( m ) ≡ 1 ( m o d   m ) a^{\varphi(m)}≡1(mod\ m) aφ(m)1(mod m)

  • 证明

    • 剩余系 指对于某一个特定的正整数 n n n,一个整数集中的数 m o d   n mod\ n mod n所得的余数域。
      • 完全剩余系 m ∈ Z + m\in Z+ mZ+,若 r 0 , r 1 , . . . r m − 1 r_0,r_1,...r_{m−1} r0,r1,...rm1 m m m个整数,并且两两模 m m m不同余,则 r 0 , r 1 , . . . r m − 1 r_0,r_1,...r_{m−1} r0,r1,...rm1叫作模 m m m的一个完全剩余系。
      • 缩系 A A A m o d   n mod\ n mod n的剩余系,若任意 A A A中两个元素相乘 m o d   n mod\ n mod n后仍为 A A A中的元素,则称 A A A m o d   n mod\ n mod n的缩系
      • a , m a,m a,m互质,则 m m m的一个缩系为
        { x 1 , x 2 , x 3 . . . x φ ( m ) } \{x_1,x_2,x_3...x_{\varphi(m)}\} {x1,x2,x3...xφ(m)}
        { a x 1 % m , a x 2 % m , a x 3 % m . . . a x φ ( m ) % m } \{ax_1\%m,ax_2\%m,ax_3\%m...ax_{\varphi(m)}\%m\} {ax1%m,ax2%m,ax3%m...axφ(m)%m}也是 m o d   m mod\ m mod m的缩系
        于是可以得到
        ∑ i = 1 φ ( m ) a x i ≡ ∑ i = 1 φ ( m ) x i   ( m o d   m ) \sum_{i=1}^{\varphi(m)}ax_i\equiv \sum_{i=1}^{\varphi(m)}x_i\ (mod\ m) i=1φ(m)axii=1φ(m)xi (mod m)
        a φ ( m ) ∑ i = 1 φ ( m ) x i ≡ ∑ i = 1 φ ( m ) x i   ( m o d   m ) a^{\varphi(m)}\sum_{i=1}^{\varphi(m)}x_i\equiv \sum_{i=1}^{\varphi(m)}x_i\ (mod\ m) aφ(m)i=1φ(m)xii=1φ(m)xi (mod m)
        a φ ( m ) ≡ 1   ( m o d   m ) a^{\varphi(m)}\equiv 1\ (mod\ m) aφ(m)1 (mod m)
        • 而当 m m m为质数时, φ ( m ) = m − 1 \varphi(m)=m-1 φ(m)=m1
          a ( m − 1 ) ≡ 1 ( m o d   m ) a^{(m-1)}≡1(mod\ m) a(m1)1(mod m)
          这就是我们熟知的 费马小定理
  • 变式 a , m a,m a,m互质 a b ≡ a b % φ ( m ) ( m o d   m ) a^b≡a^{b\%\varphi(m)}(mod\ m) abab%φ(m)(mod m)


扩展欧拉定理

b > φ ( m ) b>\varphi(m) b>φ(m) 即使 a , m a,m a,m不互质 a b ≡ a b % φ ( m ) + φ ( m ) ( m o d   m ) a^b≡a^{b \%\varphi(m)+\varphi(m)}\left(mod\ m\right) abab%φ(m)+φ(m)(mod m)

  • 证明
    m m m中提一个质因子 p p p出来 令 m = p k ⋅ s m=p^k·s m=pks
    g c d ( p k , s ) = 1 gcd(p^k,s)=1 gcd(pk,s)=1,即 p k , s p^k,s pk,s互质
    根据欧拉定理,我们知道 p φ ( s ) ≡ 1 ( m o d   s ) p^{\varphi(s)}≡1(mod\ s) pφ(s)1(mod s)
    根据欧拉函数是积性函数,我们知道 φ ( s ) ∣ φ ( m ) \varphi(s)|\varphi(m) φ(s)φ(m)所以有 p φ ( m ) ≡ p φ ( s ) ( m o d   s ) p^{\varphi(m)}≡p^{\varphi(s)}(mod\ s) pφ(m)pφ(s)(mod s)
    p φ ( s ) = x s + 1 p^{\varphi(s)}=xs+1 pφ(s)=xs+1
    那么 p φ ( s ) + k = x m + p k p^{\varphi(s)+k}=xm+p^k pφ(s)+k=xm+pk
    所以 p φ ( s ) + k ≡ p k ( m o d   m ) p^{\varphi(s)+k}≡p^k (mod\ m) pφ(s)+kpk(mod m),也有 p φ ( m ) + k ≡ p k ( m o d   m ) p^{\varphi(m)+k}≡p^k (mod\ m) pφ(m)+kpk(mod m)
    b > = k b>=k b>=k时, p b ≡ p b − k ⋅ p k ≡ p b − k ⋅ p φ ( s ) + k ≡ p b + φ ( m ) ( m o d   m ) p^b≡p^{b-k}·p^k≡p^{b-k}·p^{\varphi(s)+k}≡p^{b+\varphi(m)}(mod\ m) pbpbkpkpbkpφ(s)+kpb+φ(m)(mod m)
    又因为 k < = φ ( p k ) < = φ ( m ) k<=\varphi(p^k)<=\varphi(m) k<=φ(pk)<=φ(m),所以当 b > = 2 φ ( m ) b>=2\varphi(m) b>=2φ(m)时,满足 p b ≡ p b − φ ( m ) ( m o d   m ) p^b≡p^{b-\varphi(m)}(mod\ m) pbpbφ(m)(mod m)
    注意是 2 φ ( m ) 2\varphi(m) 2φ(m)!
    所以可以得到 p b ≡ p b % φ ( m ) + φ ( m ) ( m o d   m ) p^b≡p^{b\%\varphi(m)+\varphi(m)}(mod\ m) pbpb%φ(m)+φ(m)(mod m)
    因此我们可以得到对任意质数 p p p都有 b > = 2 φ ( m ) , p b ≡ p b % φ ( m ) + φ ( m ) ( m o d   m ) b>=2\varphi(m),p^b≡p^{b\%\varphi(m)+\varphi(m)}(mod\ m) b>=2φ(m),pbpb%φ(m)+φ(m)(mod m)
    m m m质因子的 p p p,有欧拉定理
    a a a因式分解,可以得到
    a b ≡ a b % φ ( m ) + φ ( m ) ( m o d   m ) a^b≡a^{b\%\varphi(m)+\varphi(m)}(mod\ m) abab%φ(m)+φ(m)(mod m)
    • 注意 b < φ ( m ) b<\varphi(m) b<φ(m)时,公式不一定成立

线性筛法

类似与筛素数,我们在这里利用欧拉函数是积性函数这个性质来筛 φ \varphi φ
C o d e \mathcal{Code} Code

int cnt;
int prime[maxn],phi[maxn];
bool vis[maxn];
void Euler_sieve (int n)
{
	phi[1]=1;
	for (int i=2;i<=n;++i){
		if (!vis[i])	prime[++cnt]=i,phi[i]=i-1;
		for (int j=1;j<=cnt&&i*prime[j]<=n;++j){
			vis[i*prime[j]]=true;
			if (i%prime[j]==0){	phi[i*prime[j]]=phi[i]*prime[j];break;}
			phi[i*prime[j]]=phi[i]*phi[prime[j]];
		}
	}
} 

欧拉反演

利用欧拉函数的一条性质
n = ∑ d ∣ n φ ( d ) \begin{aligned}n=\sum_{d|n}\varphi(d)\end{aligned} n=dnφ(d)
(上面有证明)
我们试着把 n n n换成其他东西试试
g c d ( i , j ) = ∑ d ∣ g c d ( i , j ) φ ( d ) = ∑ d ∣ i ∑ d ∣ j φ ( d ) \begin{aligned}gcd(i,j)=\sum_{d|gcd(i,j)}\varphi(d)=\sum_{d|i}\sum_{d|j}\varphi(d)\end{aligned} gcd(i,j)=dgcd(i,j)φ(d)=didjφ(d)
让我们求个东西试试
∑ i = 1 n g c d ( i , n ) = ∑ i = 1 n ∑ d ∣ i ∑ d ∣ n φ ( d ) = ∑ d ∣ n ∑ i = 1 n ∑ d ∣ i φ ( d ) = ∑ d ∣ n n d φ ( d ) \begin{aligned}\sum_{i=1}^ngcd(i,n)=\sum_{i=1}^n\sum_{d|i}\sum_{d|n}\varphi(d)=\sum_{d|n}\sum_{i=1}^n\sum_{d|i}\varphi(d)=\sum_{d|n}\frac{n}{d}\varphi(d)\end{aligned} i=1ngcd(i,n)=i=1ndidnφ(d)=dni=1ndiφ(d)=dndnφ(d)
把它重写一遍作为结论
∑ i = 1 n g c d ( i , n ) = ∑ d ∣ n n d φ ( d ) \begin{aligned}\sum_{i=1}^ngcd(i,n)=\sum_{d|n}\frac{n}{d}\varphi(d)\end{aligned} i=1ngcd(i,n)=dndnφ(d)

如有哪里讲得不是很明白或是有错误,欢迎指正
如您喜欢的话不妨点个赞收藏一下吧
如能得到推荐博主就更开心了
您的鼓励是博主的动力