对 于 一 个 数 n , 将 n 质 因 子 分 解 得 n = p 1 k 1 ∗ p 2 k 2 ⋯ ∗ p m k m 对于一个数n,将n质因子分解得n = p_1^{k_1}*p_2^{k_2} \cdots *p_m^{k_m} 对于一个数n,将n质因子分解得n=p1k1∗p2k2⋯∗pmkm
我们定义莫比乌斯函数:
若 n = = 1 , u ( n ) = 1 若n==1,u(n) = 1 若n==1,u(n)=1
若 对 于 任 意 的 k i = = 1 , u ( n ) = ( − 1 ) m 若对于任意的k_i == 1,u(n) = (-1)^m 若对于任意的ki==1,u(n)=(−1)m
若 存 在 k i > 1 , u ( n ) = 0 若存在k_i>1,u(n) = 0 若存在ki>1,u(n)=0
求1~n的莫比乌斯函数值:
vector prime;
bool check[maxn+5];
int um[maxn+5]
void Mobius()
{
mu[1] = 1;
for (int i = 2; i <= maxn; i++)
{
if( !check[i] )
{
prime.push_back(i);
um[i] = -1; //质数的莫比乌斯值为-1
}
for (int j = 0; j < prime.size(); j++)
{
if( i * prime[j] > maxn ) break;
check[i*prime[j]] = true;
if( i % prime[j] == 0 )
{
um[i*prime[j]] = 0; //素因子分解后有prime[j]的指数大于1
break;
}else mu[i*prime[j]] = -mu[i]; //有一个新的素因子,且指数为1,乘-1
}
}
}
莫比乌斯反演:
反 演 1 : 若 f ( n ) = ∑ d ∣ n g ( d ) , 则 g ( n ) = ∑ d ∣ n u ( d ) ∗ f ( n / d ) 反演1:若f(n) = \sum_{d|n} g(d),则g(n) = \sum_{d|n} u(d)*f(n/d) 反演1:若f(n)=∑d∣ng(d),则g(n)=∑d∣nu(d)∗f(n/d)
反 演 2 : 若 f ( n ) = ∑ n ∣ d g ( d ) , 则 g ( n ) = ∑ n ∣ d u ( d ) ∗ f ( d / n ) 反演2:若f(n) = \sum_{n|d}g(d),则g(n) = \sum_{n|d}u(d)*f(d/n) 反演2:若f(n)=∑n∣dg(d),则g(n)=∑n∣du(d)∗f(d/n)