也许更好的阅读体验
定义
欧拉函数是 小于等于 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)=x∏i=1n(1−pi1)
其中 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)=n−1
\begin{aligned}\end{aligned}
欧拉函数是积性函数
积性函数: 对于任意 互质 的整数 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)
\begin{aligned}\end{aligned}
如果 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
\begin{aligned}\end{aligned}
若 p p p为质数,则 φ ( p k ) = p k − p k − 1 \varphi(p^k)=p^k-p^{k-1} φ(pk)=pk−pk−1
因为与 p k p^k pk不互质的只有 p p p的倍数,而 p k p^k pk中 p p p的倍数有 p k − 1 p^{k-1} pk−1个
\begin{aligned}\end{aligned}
当 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,n−x)
由该公式我们可以知道,所有与 n n n互质的数都是成对出现的
\begin{aligned}\end{aligned}
小于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对
\begin{aligned}\end{aligned}
n = ∑ d ∣ n φ ( d ) n=\sum_{d|n}\varphi(d) n=∑d∣nφ(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)=d∣n∑φ(d)
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+(p−1)+(p2−p)+⋯+(pk−pk−1)=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=p1k1⋅p2k2⋅⋯⋅pmkm
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)=p1k1⋅p2k2⋅⋯⋅pmkm=n
\begin{aligned}\end{aligned}
若 a , m a,m a,m互质, a φ ( m ) ≡ 1 ( m o d m ) a^{\varphi(m)}≡1(mod\ m) aφ(m)≡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) ab≡ab%φ(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) ab≡ab%φ(m)+φ(m)(mod 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=d∣n∑φ(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)=d∣gcd(i,j)∑φ(d)=d∣i∑d∣j∑φ(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=1∑ngcd(i,n)=i=1∑nd∣i∑d∣n∑φ(d)=d∣n∑i=1∑nd∣i∑φ(d)=d∣n∑dnφ(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=1∑ngcd(i,n)=d∣n∑dnφ(d)
如有哪里讲得不是很明白或是有错误,欢迎指正
如您喜欢的话不妨点个赞收藏一下吧
如能得到推荐博主就更开心了
您的鼓励是博主的动力