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)\) 是兩個數論函式:
或者
例題
求 \(\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 說
這個交換列舉順序,然後變成積性函式預處理+數論分塊的技巧很常見。