1. 程式人生 > 其它 >莫比烏斯反演(數論學習)

莫比烏斯反演(數論學習)

莫比烏斯函式

定義

\(\mu(n)= \begin{cases} 1&n=1\\0&n\text{ 含有平方因子}\\ (-1)^k&k\text{ 為 }n\text{ 的不同單個質因子的個數}\\\end{cases}\)

性質

  1. \(d|n表示d是n的因子\)

\(\sum_{d\mid n}\mu(d)= \begin{cases} 1&n=1\\ 0&n\neq 1\\ \end{cases}\)

\(=>\sum_{d\mid n}\mu(d)=[n=1]=\varepsilon(n)\)

\(=>\mu * 1 =\varepsilon\)

  1. 反演結論

\(\displaystyle [\gcd(i,j)=1]=\sum_{d\mid\gcd(i,j)}\mu(d)\)

實現

線性篩實現

void getMu() {
  mu[1] = 1;
  for (int i = 2; i <= n; ++i) {
    if (!flag[i]) prime[++tot] = i, mu[i] = -1;
    for (int j = 1; j <= tot && i * prime[j] <= n; ++j) {
      flag[i * prime[j]] = 1;
      if (i % prime[j] == 0) {
        mu[i * prime[j]] = 0;
        break;
      }
      mu[i * prime[j]] = -mu[i];
    }
  }
}

莫比烏斯反演

公式

\(設數論函式f(n),g(n)\)

\(f(n)=\sum_{d\mid n}g(d)=>g(n)=\sum_{d\mid n}\mu(d)f(\frac{n}{d})\)

\(f(n)=\sum_{n|d}g(d)=>g(n)=\sum_{n|d}\mu(\frac{d}{n})f(d)\)