数论学习笔记(欧拉函数专题篇)

快来学数论!本文介绍欧拉函数的定义性质及拓展。

定义

1 到 NN 中与 NN 互质的数的个数被称为欧拉函数,记为 φ(N)\varphi(N)

函数式

φ(n)=n×_i=1m(11p_i)\varphi \left ( n \right ) = n \times \prod\_{i=1}^{m} \left ( 1-\frac{1}{p\_{i}} \right )

性质

性质一

显然,如果 NN 为 质数,则 φ(N)=N1\varphi(N)=N-1

性质二

欧拉函数为 积性函数: 若 gcd(a,b)=1\gcd(a , b ) = 1,则 φ(ab)=φ(a)φ(b)\varphi(ab)=\varphi(a)\varphi(b)

积性函数 指对于所有互质的整数 aabb 有性质 f(ab)=f(a)f(b)f( ab ) = f( a ) f( b ) 的数论函数。

性质三

n=pkn=p^{k}pp 为 质数,则 φ(n)=n(11p)=(p1)pk1\varphi(n)= n\left (1 - \frac{1}{p} \right )= \left ( p - 1 \right )p^{k-1}

证明
nn 个数中只有 pp 的倍数不与 nn 互质,而 pp 的倍数 xx 则有 np=pk1\dfrac{n}{p}=p^{k-1} 个,
因此 φ(n)=nnp=n(11p)=pkpk1=(p1)pk1\varphi(n)=n-\dfrac{n}{p}=n(1-\dfrac{1}{p})=p^{k}-p^{k-1}=(p-1)p^{k-1}

性质四

N=p_1c_1p_2c_2...p_mc_mN=p\_{1}^{c\_{1}}p\_{2}^{c\_{2}}...p\_{m}^{c\_{m}},则:
φ(N)=N×p_11p_1×p_21p_2×...×p_m1p_m\varphi(N)=N \times \dfrac{p\_{1}-1}{p\_{1}} \times \dfrac{p\_{2}-1}{p\_{2}} \times ... \times \dfrac{p\_{m}-1}{p\_{m}}
φ(N)=N×(11p_1)×(11p_2)×...×(11p_m)\varphi(N)=N \times \left ( 1-\dfrac{1}{p\_{1}} \right ) \times \left ( 1-\dfrac{1}{p\_{2}} \right ) \times ... \times \left ( 1-\dfrac{1}{p\_{m}} \right )

即:
${\small \varphi \left ( n \right ) = n \times \prod_{i=1}^{m} \left ( 1-\frac{1}{p_{i}} \right )} $

性质五

n>1\forall n > 1,1 到 nn 中与 nn 互质的数的和为 n×φ(n)2n \times \dfrac{\varphi(n)}{2}

证明
因为 gcd(n,x)=gcd(n,nx)\gcd( n , x ) = \gcd( n , n-x ),所以与 nn 不互质的数 xxnxn - x 成对出现,平均值为 n2\dfrac{n}{2}
因此,与 nn 互质的数的平均数也是 n2\dfrac{n}{2},进而可得 1 到 nn 中所有与 nn 互质的数的和为 n2φ(n)\dfrac{n}{2} \varphi(n),化简得 n×φ(n)2\dfrac{n\times \varphi(n)}{2}

性质六

如果 amodp=0a \mod p = 0,其中 pp 为质数,则 φ(a×p)=p×φ(a)\varphi(a \times p)=p \times \varphi(a)

证明
因为 amodp=0a \mod p = 0,所以 a×pa \times paa 包含相同的质因子,只是其中有一个质因子 pp 的指数不同。
直接把 φ(a×p)\varphi(a \times p)φ(a)\varphi(a) 按照函数式写出来,前者除去后者,商为 pp ,即 φ(a×p)φ(a)=p\dfrac{\varphi(a \times p)}{\varphi(a)}=p
所以 φ(a×p)=p×φ(a)\varphi(a \times p)=p \times \varphi(a)

性质七

如果 amodp0a \mod p \ne 0, 其中 pp 为质数,则 φ(ap)=(p1)φ(a)\varphi(ap)=(p-1)\varphi(a)

证明
欧拉函数为积性函数。
所以 φ(ap)=φ(a)φ(p)\varphi(ap)=\varphi(a)\varphi(p)
又因为 pp 是质数,由 性质一 可得 φ(p)=p1\varphi(p)=p-1
所以 φ(ap)=(p1)φ(a)\varphi(ap)=(p-1)\varphi(a)

欧拉定理

若正整数 aann 互质,则 aφ(n)1(modn)a^{\varphi(n)} \equiv 1\pmod{n},其中 φ(n)\varphi(n) 为欧拉函数。

证明
设 1 到 nn 中所有与 nn 互质的数为 a_1,a_2,...,a_φ(n)a\_{1},a\_{2},...,a\_{\varphi(n)}
因为 aann 互质,a_1a\_{1}nn 互质 (a1(modn)a \equiv 1\pmod{n} 并且 a_11(modn)a\_{1} \equiv 1\pmod{n}
所以 aa_1aa\_{1} 与 n 互质 (aa_11(modn)aa\_{1} \equiv 1\pmod{n}
同理 aa_1,aa_2,...,aa_φ(n)aa\_{1},aa\_{2},...,aa\_{\varphi(n)} 都与 nn 互质
所以 aa_1×aa_2×...×aa_φ(n)=aφ(n)×(a_1a_2...a_φ(n))aa\_{1} \times aa\_{2} \times ... \times aa\_{\varphi(n)}=a^{\varphi(n)} \times \left ( a\_{1}a\_{2}...a\_{\varphi(n)}\right )nn 互质
又因为 aφ(n)×(a_1a_2...a_φ(n))a_1a_2...a_φ(n)(modn)a^{\varphi(n)} \times \left ( a\_{1}a\_{2}...a\_{\varphi(n)}\right ) \equiv a\_{1}a\_{2}...a\_{\varphi(n)} \pmod{n}
所以 aφ(n)1(modn)a^{\varphi(n)} \equiv 1\pmod{n}

费马小定理

为欧拉定理的一种情况。
pp 为质数,则对于任意整数 aa,有 apa(modp)a^{p} \equiv a \pmod{p},即 ap11(modp)a^{p-1} \equiv 1 \pmod{p}

证明
是欧拉函数的一种情况
φ(p)=p1\varphi(p)=p-1 带入即可

欧拉函数求法

求单个数的欧拉函数

只要在 分解质因数 时顺便将欧拉函数求出来就好了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int phi(int n) 
{
int ans = n;
for (int i = 2; i <= sqrt(n); i++)
{
if (n % i == 0)
{
ans = ans / i * (i - 1);
while (n % i == 0)n /= i;
}
}
if (n > 1)ans = ans / n * (n - 1);
return ans;
}

线性求多个数的欧拉函数

在 线性筛 实现的时候顺便求欧拉函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void euler(int x) 
{ // primes数组存质数
// phi数组存欧拉函数
for(int i = 2; i <= x; i ++)
{
if(!st[i])
{
primes[cn++] = i;
phi[i] = i - 1;
//这句利用性质一
}
for(int j = 0; primes[j] <= x / i; j ++)
{
st[ primes[j] * i ] = 1;
phi[ primes[j] * i ] = phi[i] * (i % primes[j] ? primes[j] - 1 : primes[j]);
// 这句利用了性质六、七
if( i % primes[j] == 0 ) break;
}
}
}

OK,笔记完。
本蒟蒻刚学 OI ,如有错误请 D 我!!