一些学习数学的笔记,学了什么就写点什么,所以内容会特别杂(
欧拉函数
定义
欧拉函数 φ ( n ) \varphi(n) φ ( n ) ,表示小于等于 n n n ,且与 n n n 互质的数字个数。
性质
n n n 为质数时,φ ( n ) = n − 1 \varphi(n)=n-1 φ ( n ) = n − 1 。
是积性函数,即若 a , b a,b a , b 互质,则有 φ ( a b ) = φ ( a ) φ ( b ) \varphi(ab)=\varphi(a)\varphi(b) φ ( a b ) = φ ( a ) φ ( b ) 。其中比较特殊的是:当 n n n 是奇数时,φ ( n ) = φ ( 2 n ) \varphi(n)=\varphi(2n) φ ( n ) = φ ( 2 n ) 。
n = ∑ d ∣ n φ ( d ) n=\sum_{d|n}\varphi(d) n = ∑ d ∣ n φ ( d ) 。
设分解质因数后 n = ∏ i = 1 s p i k i n=\prod_{i=1}^sp_i^{k_i} n = ∏ i = 1 s p i k i ,则 φ ( n ) = n ∏ i = 1 s p i − 1 p i \varphi(n)=n\prod_{i=1}^s\frac{p_i-1}{p_i} φ ( n ) = n ∏ i = 1 s p i p i − 1 。
求值
单个欧拉函数的计算
根据上面的第四条性质,可以枚举 n n n 的质因数进行计算,时间复杂度 O ( n ) O(\sqrt n) O ( n ) 。
1 2 3 4 5 6 7 8 9 10 11 int phi (int x) { int res = x; for (int i = 2 ; i <= sqrt (x); i++) if (x % i == 0 ) { res /= i, res *= (i - 1 ); while (x % i == 0 ) x /= i; } if (x != 1 ) res /= x, res *= (x - 1 ); return res; }
预处理前 N 个欧拉函数的值
在线性筛的过程中,设 n n n 的最小质因子为 p 1 p_1 p 1 ,设 q = n p 1 q=\frac{n}{p_1} q = p 1 n ,则 n n n 一定是通过 p 1 × q p_1\times q p 1 × q 筛掉的。我们假设已经求出了 φ ( q ) \varphi(q) φ ( q ) 的值,目标是推出 φ ( n ) \varphi(n) φ ( n ) 。在这个过程中我们分两种情况:
1. q q q 是 p 1 p_1 p 1 的倍数
注意到此时 n n n 和 q q q 的质因子是相同的,那么:
φ ( q ) = q ∏ i = 1 s p i − 1 p i \varphi(q)=q\prod_{i=1}^s\frac{p_i-1}{p_i}
φ ( q ) = q i = 1 ∏ s p i p i − 1
φ ( n ) = n ∏ i = 1 s p i − 1 p i = p 1 × q ∏ i = 1 s p i − 1 p i = p 1 × φ ( q ) \varphi(n)=n\prod_{i=1}^s\frac{p_i-1}{p_i}=p_1\times q\prod_{i=1}^s\frac{p_i-1}{p_i}=p_1\times \varphi(q)
φ ( n ) = n i = 1 ∏ s p i p i − 1 = p 1 × q i = 1 ∏ s p i p i − 1 = p 1 × φ ( q )
即可推出 φ ( n ) \varphi(n) φ ( n ) 的值。
2. q q q 不是 p 1 p_1 p 1 的倍数
此时 q q q 与 p 1 p_1 p 1 一定互质。欧拉函数是积性函数,可以用这条性质来推:
φ ( n ) = φ ( p 1 × q ) = φ ( p 1 ) × φ ( q ) = ( p 1 − 1 ) × φ ( q ) \varphi(n)=\varphi(p_1\times q)=\varphi(p_1)\times\varphi(q)=(p_1-1)\times\varphi(q)
φ ( n ) = φ ( p 1 × q ) = φ ( p 1 ) × φ ( q ) = ( p 1 − 1 ) × φ ( q )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 bool np[N]; int phi[N];void init () { int n = 1000000 ; phi[1 ] = 1 ; for (int i = 2 ; i <= n; i++) { if (!np[i]) prm.push_back (i), phi[i] = i - 1 ; for (auto j : prm) { if (i * j > n) break ; np[i * j] = 1 ; if (i % j == 0 ) { phi[i * j] = j * phi[i]; break ; } phi[i * j] = phi[i] * (j - 1 ); } } }
应用
欧拉函数可以解决对一些 gcd \gcd g cd 进行求和的问题。
利用性质:
n = ∑ d ∣ n φ ( d ) n=\sum_{d|n}\varphi(d)
n = d ∣ n ∑ φ ( d )
可以得出:
gcd ( a , b ) = ∑ d ∣ gcd ( a , b ) φ ( d ) = ∑ d ∣ a , d ∣ b φ ( d ) \gcd(a,b)=\sum_{d|\gcd(a,b)}\varphi(d)=\sum_{d|a,d|b}\varphi(d)
g cd( a , b ) = d ∣ g c d ( a , b ) ∑ φ ( d ) = d ∣ a , d ∣ b ∑ φ ( d )
∑ i = 1 n gcd ( i , n ) = ∑ i = 1 n ∑ d ∣ i , d ∣ n φ ( d ) = ∑ d ∣ n ∑ 1 ≤ i ≤ n , d ∣ i φ ( d ) = ∑ d ∣ n ⌊ n d ⌋ φ ( d ) \sum_{i=1}^n \gcd(i,n)=\sum_{i=1}^n\sum_{d|i,d|n}\varphi(d)=\sum_{d|n}\sum_{1\le i\le n,d|i}\varphi(d)=\sum_{d|n}\lfloor\frac{n}{d}\rfloor\varphi(d)
i = 1 ∑ n g cd( i , n ) = i = 1 ∑ n d ∣ i , d ∣ n ∑ φ ( d ) = d ∣ n ∑ 1 ≤ i ≤ n , d ∣ i ∑ φ ( d ) = d ∣ n ∑ ⌊ d n ⌋ φ ( d )
∑ i = 1 n ∑ j = 1 n gcd ( i , j ) = ∑ i = 1 n ∑ j = 1 n ∑ d ∣ i , d ∣ j φ ( d ) = ∑ d ∑ 1 ≤ i ≤ n , d ∣ i ∑ 1 ≤ j ≤ n , d ∣ j φ ( d ) = ∑ d ⌊ n d ⌋ 2 φ ( d ) \sum_{i=1}^n \sum_{j=1}^n \gcd(i,j)=\sum_{i=1}^n \sum_{j=1}^n\sum_{d|i,d|j}\varphi(d)=\sum_d\sum_{1\le i \le n,d|i}~\sum_{1\le j \le n,d|j} \varphi(d)=\sum_d\lfloor\frac{n}{d}\rfloor^2\varphi(d)
i = 1 ∑ n j = 1 ∑ n g cd( i , j ) = i = 1 ∑ n j = 1 ∑ n d ∣ i , d ∣ j ∑ φ ( d ) = d ∑ 1 ≤ i ≤ n , d ∣ i ∑ 1 ≤ j ≤ n , d ∣ j ∑ φ ( d ) = d ∑ ⌊ d n ⌋ 2 φ ( d )
欧拉定理
若 gcd ( a , m ) = 1 \gcd(a,m)=1 g cd( a , m ) = 1 ,则 a φ ( m ) ≡ 1 ( m o d m ) a^{\varphi(m)} \equiv 1 \pmod{m} a φ ( m ) ≡ 1 ( m o d m ) 。
莫比乌斯反演
莫比乌斯函数
μ \mu μ 是莫比乌斯函数:
μ ( n ) = { 1 n = 1 0 n 有平方因子 ( − 1 ) k 其它情况,设 k 为 n 本质不同的质因子个数 \mu(n)=\begin{cases}
1 & n=1 \\
0 & n有平方因子 \\
(-1)^k & 其它情况,设k为n本质不同的质因子个数 \\
\end{cases}
μ ( n ) = ⎩ ⎪ ⎪ ⎨ ⎪ ⎪ ⎧ 1 0 ( − 1 ) k n = 1 n 有 平 方 因 子 其 它 情 况 , 设 k 为 n 本 质 不 同 的 质 因 子 个 数
性质
莫比乌斯函数是积性函数。
∑ d ∣ n μ ( d ) = [ n = 1 ] \sum_{d|n}\mu(d)=[n=1] ∑ d ∣ n μ ( d ) = [ n = 1 ] 。
反演结论:[ gcd ( a , b ) = 1 ] = ∑ d ∣ gcd ( a , b ) μ ( d ) [\gcd(a,b)=1]=\sum_{d|\gcd(a,b)}\mu(d) [ g cd( a , b ) = 1 ] = ∑ d ∣ g c d ( a , b ) μ ( d ) 。
莫比乌斯变换
设 f ( n ) , g ( n ) f(n),g(n) f ( n ) , g ( n ) 是两个数论函数。若有 f ( n ) = ∑ d ∣ n g ( d ) f(n)=\sum_{d|n}g(d) f ( n ) = ∑ d ∣ n g ( d ) ,则有:
形式一:g ( n ) = ∑ d ∣ n μ ( d ) f ( n d ) g(n)=\sum_{d|n}\mu(d)f(\frac{n}{d}) g ( n ) = ∑ d ∣ n μ ( d ) f ( d n )
形式二:g ( n ) = ∑ d ∣ n μ ( n d ) f ( d ) g(n)=\sum_{d|n}\mu(\frac{n}{d})f(d) g ( n ) = ∑ d ∣ n μ ( d n ) f ( d )
容易看出两种形式本质上是相同的。