其他分享
首页 > 其他分享> > 【数学】加性函数与积性函数

【数学】加性函数与积性函数

作者:互联网

一、前置知识

艾佛森括号
[ P ] = { 1 if  P  is true 0 otherwise [P]= \begin{cases} 1 & \text{if}\ P\ \text{is true} \\ 0 & \text{otherwise} \end{cases} [P]={10​if P is trueotherwise​

其中 P P P 是一个可真可假的命题。

如 [ 114514 ≤ 1919810 ] = 1 , [ − 1 ∈ N ] = 0 [114514\le 1919810] = 1, [-1 \in \mathbb{N}] = 0 [114514≤1919810]=1,[−1∈N]=0。

二、加性函数

加性函数:对于 ∀ n , m ∈ N ∗ , gcd ⁡ ( n , m ) = 1 \forall n, m \in \mathbb{N}^*, \gcd(n, m) = 1 ∀n,m∈N∗,gcd(n,m)=1,若 f ( n ) + f ( m ) = f ( n m ) f(n) + f(m) = f(nm) f(n)+f(m)=f(nm),称函数 f f f 为加性函数;

注:此处加性函数指数论上的加性函数 ( A d d i t i v e   f u n c t i o n ) (\rm Additive\ function) (Additive function),应与代数中的加性函数 ( A d d i t i v e   m a p ) (\rm Additive\ map) (Additive map) 区分。

完全加性函数:对于 ∀ n , m ∈ N ∗ \forall n, m \in \mathbb{N}^* ∀n,m∈N∗,若 f ( n ) + f ( m ) = f ( n m ) f(n) + f(m) = f(nm) f(n)+f(m)=f(nm),称函数 f f f 为完全加性函数。完全加性函数为加性函数的一种。

对于所有的加性函数,根据 f ( 1 ) = f ( 1 × 1 ) = f ( 1 ) + f ( 1 ) f(1) = f(1\times 1) = f(1) + f(1) f(1)=f(1×1)=f(1)+f(1) 可得 f ( 1 ) = 0 f(1) = 0 f(1)=0。

加性函数 f f f 满足 f ( ∏ i = 1 k p i α i ) = ∑ i = 1 k f ( p i α i ) f\left(\prod\limits_{i=1}^k p_i^{\alpha_i}\right) = \sum\limits_{i=1}^k f(p_i^{\alpha_i}) f(i=1∏k​piαi​​)=i=1∑k​f(piαi​​),完全加性函数 f f f 满足 f ( ∏ i = 1 k p i α i ) = ∑ i = 1 k f ( p i α i ) = ∑ i = 1 k f ( p i ) ⋅ α i f\left(\prod\limits_{i=1}^k p_i^{\alpha_i}\right) = \sum\limits_{i=1}^k f(p_i^{\alpha_i}) = \sum\limits_{i=1}^k f(p_i) \cdot \alpha_i f(i=1∏k​piαi​​)=i=1∑k​f(piαi​​)=i=1∑k​f(pi​)⋅αi​。


证明时,先证明 f ( 1 ) = 0 f(1) = 0 f(1)=0。

然后证明加性需证明 gcd ⁡ ( n , m ) = 1 \gcd(n,m) = 1 gcd(n,m)=1 时 f ( n ) + f ( m ) = f ( n m ) f(n) + f(m) = f(nm) f(n)+f(m)=f(nm)(废话);

证明完全加性只需证明 f ( n ) + f ( p i ) = f ( n p i ) , p i ∈ P f(n) + f(p_i) = f(np_i), p_i\in \mathbb{P} f(n)+f(pi​)=f(npi​),pi​∈P 即可,因为证明 f ( n ) + f ( m ) = f ( n m ) f(n) + f(m) = f(nm) f(n)+f(m)=f(nm) 可将 m m m 分解质因数再合并。


常见加性函数

常见完全加性函数

三、积性函数

积性函数:对于 ∀ n , m ∈ N ∗ , gcd ⁡ ( n , m ) = 1 \forall n,m\in\mathbb{N}^*, \gcd(n, m) = 1 ∀n,m∈N∗,gcd(n,m)=1, 若 f ( n ) f ( m ) = f ( n m ) f(n)f(m)=f(nm) f(n)f(m)=f(nm),称函数 f f f 为积性函数;

完全积性函数:对于 ∀ n , m ∈ N ∗ \forall n,m\in\mathbb{N}^* ∀n,m∈N∗,若 f ( n ) f ( m ) = f ( n m ) f(n)f(m)=f(nm) f(n)f(m)=f(nm),称函数 f f f 为完全积性函数。完全积性函数为积性函数的一种。

对于所有的积性函数,根据 f ( 1 ) = f ( 1 × 1 ) = f ( 1 ) f ( 1 ) f(1) = f(1\times 1) = f(1)f(1) f(1)=f(1×1)=f(1)f(1) 可得 f ( 1 ) = 1 f(1)=1 f(1)=1。

注意:值恒等于 0 0 0 的函数一般不看作积性函数。

积性函数 f f f 满足 f ( ∏ i = 1 k p i α i ) = ∏ i = 1 k f ( p i α i ) f\left(\prod\limits_{i=1}^k p_i^{\alpha_i}\right) = \prod\limits_{i=1}^k f(p_i^{\alpha_i}) f(i=1∏k​piαi​​)=i=1∏k​f(piαi​​),完全积性函数 f f f 满足 f ( ∏ i = 1 k p i α i ) = ∏ i = 1 k f ( p i α i ) = ∏ i = 1 k f ( p i ) α i f\left(\prod\limits_{i=1}^k p_i^{\alpha_i}\right) = \prod\limits_{i=1}^k f(p_i^{\alpha_i}) = \prod\limits_{i=1}^k f(p_i)^{\alpha_i} f(i=1∏k​piαi​​)=i=1∏k​f(piαi​​)=i=1∏k​f(pi​)αi​。


加性函数与积性函数的互相转化

若函数 f f f 为加性函数,函数 g g g 满足 g ( n ) = C f ( n ) g(n) = C^{f(n)} g(n)=Cf(n),其中 C C C 为常数。

首先 g ( 1 ) = C f ( 1 ) = C 0 = 1 g(1) = C^{f(1)} = C^0 = 1 g(1)=Cf(1)=C0=1;

当 gcd ⁡ ( n , m ) = 1 \gcd(n, m) = 1 gcd(n,m)=1 时, g ( n ) g ( m ) = C f ( n ) + f ( m ) g(n) g(m) = C^{f(n) + f(m)} g(n)g(m)=Cf(n)+f(m),由 f f f 为加性函数可得 C f ( n ) + f ( m ) = C f ( n m ) C^{f(n) + f(m)} = C^{f(nm)} Cf(n)+f(m)=Cf(nm),即 g ( n ) g ( m ) = g ( n m ) g(n) g(m) = g(nm) g(n)g(m)=g(nm),所以函数 g g g 为积性函数。

同理,当函数 f f f 为完全加性函数时,函数 g g g 为完全积性函数。


证明时,先证明 f ( 1 ) = 1 f(1) = 1 f(1)=1。

然后证明积性需证明 gcd ⁡ ( n , m ) = 1 \gcd(n,m) = 1 gcd(n,m)=1 时 f ( n ) f ( m ) = f ( n m ) f(n) f(m) = f(nm) f(n)f(m)=f(nm);

证明完全积性只需证明 f ( n ) f ( p i ) = f ( n p i ) , p i ∈ P f(n) f(p_i) = f(np_i), p_i\in \mathbb{P} f(n)f(pi​)=f(npi​),pi​∈P 即可,因为证明 f ( n ) f ( m ) = f ( n m ) f(n) f(m) = f(nm) f(n)f(m)=f(nm) 可将 m m m 分解质因数再合并。


常见积性函数

常见完全积性函数

四、线性筛

主要是常见积性函数的,加性函数是类似的。

套路是在线性筛中

void pre(int n) // 线性筛积性函数 f
{
    f[1] = 1; // 注意这里,积性函数基本性质
	for (int i = 2; i <= n; i++)
	{
		if (!vis[i])
		{
			p[++p[0]] = i;
            f[i] = ???; //质数得直接算
		}
		for (int j = 1; j <= p[0] && i * p[j] <= n; j++)
		{
			vis[i * p[j]] = true;
			if (i % p[j] == 0)
			{
                f[i * p[j]] = ???; // 特殊情况
				break;
			}
            f[i * p[j]] = f[i] * f[p[j]]; // 一般情况
		}
	}
}

像上面一样分类,原因是当 i % p[j] == 0 ,即 p j ∣ i p_j\mid i pj​∣i 时有 gcd ⁡ ( i , p j ) > 1 \gcd(i, p_j) > 1 gcd(i,pj​)>1,不满足积性,得单独处理;否则有 gcd ⁡ ( i , p j ) = 1 \gcd(i, p_j) = 1 gcd(i,pj​)=1,则 f ( i ) ⋅ f ( p j ) = f ( i ⋅ p j ) f(i)\cdot f(p_j) = f(i\cdot p_j) f(i)⋅f(pj​)=f(i⋅pj​)。

用线性筛,时间复杂度为 O ( n ) \Omicron(n) O(n)。

1. 欧拉函数

当 p ∣ n p\mid n p∣n 时 φ ( n p ) = φ ( n ) p \varphi(np) = \varphi(n) p φ(np)=φ(n)p。

void pre(int n)
{
	phi[1] = 1;
	for (int i = 2; i <= n; i++)
	{
		if (!vis[i])
		{
			p[++p[0]] = i;
			phi[i] = i - 1;
		}
		for (int j = 1; j <= p[0] && i * p[j] <= n; j++)
		{
			vis[i * p[j]] = true;
			if (i % p[j] == 0)
			{
				phi[i * p[j]] = phi[i] * p[j];
				break;
			}
			phi[i * p[j]] = phi[i] * phi[p[j]];
		}
	}
}

2. 莫比乌斯函数

当 p ∣ n p\mid n p∣n 时 μ ( n p ) = 0 \mu(np) = 0 μ(np)=0。

void pre(int n)
{
	mu[1] = 1;
	for (int i = 2; i <= n; i++)
	{
		if (!vis[i])
		{
			p[++p[0]] = i;
			mu[i] = -1;
		}
		for (int j = 1; j <= p[0] && i * p[j] <= n; j++)
		{
			vis[i * p[j]] = true;
			if (i % p[j] == 0)
			{
				mu[i * p[j]] = 0;
				break;
			}
			mu[i * p[j]] = mu[i] * mu[p[j]];
		}
	}
}

3. 因数个数函数

由算术基本定理得 n = ∏ i = 1 k p i α i n = \prod\limits_{i = 1}^k p_i^{\alpha_i} n=i=1∏k​piαi​​,那么我们知道 d ( n ) = ∏ i = 1 k ( α i + 1 ) d(n) = \prod\limits_{i = 1}^k (\alpha_i + 1) d(n)=i=1∏k​(αi​+1)。

设 n u m ( n ) num(n) num(n) 为 n n n 的最小质因数的次数。

void pre(int n)
{
	d[1] = 1;
	for (int i = 2; i <= n; i++)
	{
		if (!vis[i])
		{
			p[++p[0]] = i;
			d[i] = 2;
			num[i] = 1;
		}
		for (int j = 1; j <= p[0] && i * p[j] <= n; j++)
		{
			vis[i * p[j]] = true;
			if (i % p[j] == 0)
			{
				d[i * p[j]] = d[i] / (num[i] + 1) * (num[i] + 2);
				num[i * p[j]] = num[i] + 1;
				break;
			}
			d[i * p[j]] = d[i] * d[p[j]];
			num[i * p[j]] = 1;
		}
	}
}

4. 因数和函数

首先 σ ( n ) = ∏ i = 1 k ∑ j = 0 α i p i j \sigma(n) = \prod\limits_{i = 1}^k \sum\limits_{j = 0}^{\alpha_i} p_i^{j} σ(n)=i=1∏k​j=0∑αi​​pij​。

设 n u m ( n ) num(n) num(n) 为 n n n 的最小质因数 p 1 p_1 p1​ 的 ∑ i = 0 α 1 p 1 i \sum\limits_{i = 0}^{\alpha_1} p_1^i i=0∑α1​​p1i​。

UVA1730 Sum of MSLCM(终于有题写了

void pre(int n)
{
	sigma[1] = 1;
	for (int i = 2; i <= n; i++)
	{
		if (!vis[i])
		{
			p[++p[0]] = i;
			sigma[i] = i + 1;
			num[i] = i + 1;
		}
		for (int j = 1; j <= p[0] && i * p[j] <= n; j++)
		{
			vis[i * p[j]] = true;
			if (i % p[j] == 0)
			{
				sigma[i * p[j]] = sigma[i] / num[i] * (num[i] * p[j] + 1);
				num[i * p[j]] = num[i] * p[j] + 1;
				break;
			}
			sigma[i * p[j]] = sigma[i] * sigma[p[j]];
			num[i * p[j]] = 1 + p[j];
		}
	}
}

五、参考资料

标签:mathbb,gcd,limits,积性,sum,mid,nm,加性,函数
来源: https://blog.csdn.net/mango114514/article/details/122441374