乘性函数相关内容,主要欧拉函数相关。
乘性函数
基本定义与性质
算数函数:定义在所有正整数上的函数
乘性函数(积性函数):算数函数f f f ,任意两个互素的正整数 n n n 和 m m m , 均有 f ( m n ) = f(m n)= f ( m n ) = f ( m ) f ( n ) f(m) f(n) f ( m ) f ( n )
完全乘性(完全积性)函数:乘性函数去掉互素的条件。
任意正整数 n n n 的素数幂分解 n = p 1 a 1 ⋅ p 2 a 2 ⋯ p s a s n=p_{1}{ }^{a_{1}} \cdot p_{2}^{a_2} \cdots p_{s}{ }^{a_{s}} n = p 1 a 1 ⋅ p 2 a 2 ⋯ p s a s ,f f f 是乘性函数⇒ f ( n ) = f ( p 1 a 1 ) ⋅ f ( p 2 a 2 ) ⋯ f ( p s a s ) \Rightarrow f(n)=f\left(p_{1}{ }^{a_{1}}\right) \cdot f\left(p_{2}{ }^{a_{2}}\right) \cdots f\left(p_{s}^{a_s}\right) ⇒ f ( n ) = f ( p 1 a 1 ) ⋅ f ( p 2 a 2 ) ⋯ f ( p s a s )
积性函数的和还是积性函数
举例:
欧拉函数
gcd:gcd ( i , m × n ) = gcd ( i × m ) × gcd ( i × n ) , m , n \operatorname{gcd}(i, m \times n)=\operatorname{gcd}(i \times m) \times \operatorname{gcd}(i \times n), m, n g c d ( i , m × n ) = g c d ( i × m ) × g c d ( i × n ) , m , n 互质
欧拉函数
欧拉函数 φ ( n ) \varphi(n) φ ( n ) :不超过 n n n 且与 n n n 互素的正整数的个数,n ∈ N ∗ n\in N^* n ∈ N ∗
p p p 是素数⇔ φ ( p ) = p − 1 \Leftrightarrow\varphi(p)=p-1 ⇔ φ ( p ) = p − 1
p p p 是素数,a ∈ N ∗ ⇒ φ ( p a ) = p a − p a − 1 a\in N^*\Rightarrow \varphi\left(p^{a}\right)=p^{a}-p^{a-1} a ∈ N ∗ ⇒ φ ( p a ) = p a − p a − 1
证明:与p a p^a p a 不互素的只有p , 2 p , 3 p , ⋯ , p k − 1 p p,2p,3p,\cdots,p^{k-1}p p , 2 p , 3 p , ⋯ , p k − 1 p ,等比求和减去即可
任意正整数 n n n 的素数幂分解 n = p 1 a 1 ⋅ p 2 a 2 ⋯ p s a s ⇒ φ ( n ) = n ⋅ ( 1 − 1 p 1 ) ⋅ ( 1 − 1 p 2 ) ⋯ ( 1 − 1 p s ) n=p_{1}^{a_{1}} \cdot p_{2}^{a_2} \cdots p_{s}{ }^{a_{s}}\Rightarrow \varphi(n)=n \cdot\left(1-\frac{1}{p_{1}}\right) \cdot\left(1-\frac{1}{p_{2}}\right) \cdots\left(1-\frac{1}{p_{s}}\right) n = p 1 a 1 ⋅ p 2 a 2 ⋯ p s a s ⇒ φ ( n ) = n ⋅ ( 1 − p 1 1 ) ⋅ ( 1 − p 2 1 ) ⋯ ( 1 − p s 1 )
证明:上一定理还可写成φ ( p a ) = p a ( 1 − 1 p ) \varphi\left(p^{a}\right)=p^{a}(1-\frac{1}{p}) φ ( p a ) = p a ( 1 − p 1 ) ,由欧拉函数是积性函数可得上式。
推论:当 n n n 为奇数时, 有 φ ( 2 n ) = φ ( n ) \varphi(2 n)=\varphi(n) φ ( 2 n ) = φ ( n )
n > 2 , n ∈ N ∗ ⇒ φ ( n ) n>2,n\in N^*\Rightarrow \varphi(n) n > 2 , n ∈ N ∗ ⇒ φ ( n ) 是偶数
n ∈ N ∗ , ∑ d ∣ n φ ( d ) = n n\in N^*,\sum_{d\mid n}\varphi(d)=n n ∈ N ∗ , ∑ d ∣ n φ ( d ) = n
欧拉定理: m m m 是一正整数, a a a 是一个整数且 ( a , m ) = 1 (a, m)=1 ( a , m ) = 1 , 那么 a φ ( m ) ≡ a^{\varphi(m)} \equiv a φ ( m ) ≡ 1 ( m o d m ) 1(\bmod m) 1 ( m o d m )
x m o d p = 0 ⇒ φ ( x p ) = φ ( x ) ⋅ p x\mod p=0\Rightarrow \varphi(xp)=\varphi(x)\cdot p x m o d p = 0 ⇒ φ ( x p ) = φ ( x ) ⋅ p ,证明如下:
[ 1 , x ] [1,x] [ 1 , x ] 中与x x x 不互质的数y y y ,y + x y+x y + x 与x x x 仍不互质,y + c x , c ≤ p y+cx,c\leq p y + c x , c ≤ p 仍与x x x 不互质,即[ 1 , x ] [1,x] [ 1 , x ] 区间中与x x x 不互质的数在+ c x +cx + c x 后仍不互质。前面素数性质可证[ 1 , x ] [1,x] [ 1 , x ] 中与x x x 互质的数在+ c x +cx + c x 后仍互质。所以可得上述结论。
注:以下均来自kuangbin的模板
分解质因数法
上面第四条定理
1 2 3 4 5 6 7 8 int Euler (int n) { getFactors (n); int ret = n; for (int i = 0 ; i < fatCnt; i++) ret = ret / factor[i][0 ] * (factor[i][0 ] - 1 ); return ret; }
递推法
将φ ( i ) \varphi(i) φ ( i ) 先置为i i i ,把k i ki k i 的原始φ \varphi φ 乘上这个i i i 做出的贡献。
过程中,φ \varphi φ 没有赋值说明是素数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 int euler[N];void getEuler () { memset (euler, 0 , sizeof (euler)); euler[1 ] = 1 ; for (int i = 2 ; i < N; i++) if (!euler[i]) for (int j = i; j < N; j += i) { if (!euler[j]) euler[j] = j; euler[j] = euler[j] / i * (i - 1 ); } }
求单个欧拉函数
找素因子,用公式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 int euler (int n) { int ans = n; for (int i = 2 ; i * i <= n; i++) if (n % i == 0 ) { ans -= ans / i; while (n % i == 0 ) n /= i; } if (n > 1 ) ans -= ans / n; return ans; }
线性筛
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 bool check[N + 10 ];int phi[N + 10 ];int prime[N + 10 ];int tot; void phi_and_prime_table (int N) { memset (check, false , sizeof (check)); phi[1 ] = 1 ; tot = 0 ; for (int i = 2 ; i <= N; i++) { if (!check[i]) { prime[tot++] = i; phi[i] = i - 1 ; } for (int j = 0 ; j < tot; j++) { if (i * prime[j] > N) break ; check[i * prime[j]] = true ; if (i % prime[j] == 0 ) { phi[i * prime[j]] = phi[i] * prime[j]; break ; } else phi[i * prime[j]] = phi[i] * (prime[j] - 1 ); } } }