1. 程式人生 > 其它 >SpringBoot 整合Servlet、Filter和Listener

SpringBoot 整合Servlet、Filter和Listener

積性函式

積性函式:對於任意互質的整數 \(a,b\)\(f(ab)=f(a)f(b)\) 則稱 \(f(x)\) 的數論函式。

完全積性函式:對於任意整數 \(a,b\)\(f(ab)=f(a)f(b)\) 的數論函式。

  • 常見的積性函式:\(\varphi,\mu,\sigma,d\)

  • 常見的完全積性函式:\(\epsilon,I,id\)

    \(\epsilon(n) = [n=1], I(n) = 1, id(n) = n\)

狄利克雷卷積

\(f, g\) 是兩個數論函式,它們的狄利克雷卷積卷積是:\((f*g)(n) = \sum \limits _{d | n} f(d) g(\frac{n}{d})\)

性質:滿足交換律,結合律

單位元:\(\epsilon\) (即 \(f*\epsilon=f\)

結合狄利克雷卷積得到的幾個性質:

  • \(\mu * I = \epsilon\)
  • \(\varphi * I = id\)
  • \(\mu * id = \varphi\)

莫比烏斯函式

定義
\[\mu(n)=\left\{ \begin{aligned} 1\ &(n=1)\\ (-1)^m\ &(m 為質數個數)\\ 0\ &(含有平方因子) \end{aligned} \right. \]
性質
  • \[\lfloor\frac{n}{xy}\rfloor=\lfloor\frac{\lfloor\frac{n}{x}\rfloor}{y}\rfloor \]
  • \[\sum_{d|n}\mu(d)=[n=1] \]
  • \[\sum_{d\mid n}\frac{\mu(d)}{d}=\frac{\varphi(n)}{n} \]
  • \[\sigma_k(nm)=\sum_{x\mid n}\sum_{y\mid n}[\gcd(x,y)=1](\frac{n}{x}\cdot y)^k \]

    \(\sum_{i=1}^n\sum_{j=1}^m\sigma_k(ij)\) 的推式子過程

    公式

    \(f(i), g(i)\) 是兩個數論函式:

\[\begin{aligned} &f(i) = \sum_{d\mid i}g(d)\\ \Rightarrow &g(i) = \sum_{d\mid i}\mu(\frac i d)f(d) = \sum_{d\mid i}\mu(d)f(\frac i d) \end{aligned} \]

或者

\[\begin{aligned} &f(i) = \sum_{d = 1}^{\left\lfloor\frac n i\right\rfloor}g(d\cdot i)\\ \Rightarrow &g(i) = \sum_{d = 1}^{\left\lfloor\frac n i\right\rfloor}f(d\cdot i)\mu(d) \end{aligned} \]

例題

\(\gcd(i,j)=k\) 的個數
\[\sum_{i=1}^n\sum_{j = 1}^m[\gcd(i,j)=k] \]

\(f(k)\)\(\gcd(i,j)=k\) 的個數,\(g(k)\)\(\gcd(i,j)\)\(k\) 的倍數的個數,則:

\[g(k) = \sum_{d = 1}^{\left\lfloor\frac n k\right\rfloor}f(d\cdot x) \]

\(g(k)=\lfloor\frac{n}{k}\rfloor\cdot\lfloor\frac{m}{k}\rfloor\),故直接莫反+數論分塊求 \(f(k)\) 即可。

\(\gcd(i,j)\)\(k\) 次冪
\[\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)^k\bmod{10^9+7} \]

用之前的做法將得到:

\[\sum_{d=1}^nd^k\sum_{x=1}^{\lfloor\frac{n}{d}\rfloor}\mu(x)\lfloor\frac{n}{dx}\rfloor\lfloor\frac{m}{dx}\rfloor \]

這樣可以做到 \(O(n^{\frac{3}{4}})\),但是還有更快的做法,列舉 \(dx\),記為 \(T\)

\[\sum_{T=1}^n\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor\sum_{d\mid T} d^k\cdot\mu(\frac{T}{d}) \]

\(f(n)=\sum_{d\mid n}d^k\mu(\frac{n}{d})\),則只要求出 \(f\) 的字首和,就可以 \(O(\sqrt n)\) 解決單次詢問。

Sengxian 說

這個交換列舉順序,然後變成積性函式預處理+數論分塊的技巧很常見。