不是入门筛法

蹭热度。感觉没意思。

但是其实思想很简单。

狄利克雷卷积

我们熟知 \(\mu * 1 =\epsilon , \varphi * 1 =\mathtt{id}\)

然后可以得到 \(\mu * 1 * \mathtt{id} = \varphi * 1 \to \mu * \mathtt{id} = \varphi\)

狄利克雷生成函数(DGF)

\[D(z)=\sum_{i\geq 1} f(i) i^{-z} \]

其中 \(f\) 是一个数论函数。

\(f\) 是一个积性函数,有 \(D(z)=\prod\limits_{p\in{\mathbb{P}}}\sum\limits_{i\geq 0} f(p^i) p^{-iz}\)。对其质因数分解即可。

DGF 做卷积的含义是 狄利克雷卷积。

元函数:
\(\mathbf{E(z)} = \sum\limits_{i\geq 1} \epsilon(i) i^{-z} =1\)

常数函数:
\(\mathbf{C(z)} = \sum\limits_{i\geq 1} 1(i) i^{-z} = \zeta(z)\)

幂函数 \(\mathtt{id}_{k}(z) =z^k\)
\(\mathbf{ID_k(z)} = \sum\limits_{i\geq 1} i^k i^{-z} = \zeta(z-k)\)

莫比乌斯函数 \(\mathbf{M(z)} = \frac{\mathbf{E(z)}}{\mathbf{C(z)}} = \frac{1}{\zeta(z)}\)

欧拉函数 \(\mathbf{M(z)} = \frac{\mathbf{ID_1(z)}}{\mathbf{C(z)}} = \frac{\zeta(z-1)}{\zeta(z)}\)

杜教筛

对于一个 \(h = f * g\),记录 \(f,g\) 的前缀和为 \(F,G\)。如果我们要求 \(F\),怎么办?

\[\begin{aligned} H(n) &=\sum_{i=1}^n h(i) \\ &=\sum_{i=1}^n \sum_{d|i} f(i) g(\frac{i}{d}) \\ &=\sum_{i=1}^n g(i) \sum_{d\leq n,d|i} f(\frac{i}{d}) \\ &=\sum_{i=1}^n g(i) \sum_{d=1}^{\lfloor\frac{n}{i}\rfloor} f(d) \\ &= \sum_{i=1}^n g(i) F(\lfloor\frac{n}{i}\rfloor) = F(n)g(1) + \sum_{i=2}^n g(i) F(\lfloor\frac{n}{i}\rfloor) \end{aligned} \]

整理的得到 \(F(n) = \frac{1}{g(1)}(H(n)-\sum\limits_{i=2}^n g(i) F(\lfloor\frac{n}{i}\rfloor))\)

喝过能够快速算出 \(H(n)\)\(G(n)\) 那么我们就可以直接算出 \(F(n)\) 了。

例题先咕咕,就放几个简单题就行了。

  • P4318 : 求第 \(n\) 小的无平方因子数。

二分,现在要计算 \(\sum\limits_{i=1}^n [\mu(i) \not ={0}] \to \sum\limits_{i=1}^n \mu^2(i)\)

考虑一下他的 DGF,

\[\begin{aligned} \mathbf{F(z)} &= \sum_{i\geq 1}\mu^2(i) i^{-z} \\ &= \prod\limits_{p\in{\mathbb{P}}}\sum\limits_{i\geq 0} \mu^2(p^i) p^{-iz} \\ &= \prod\limits_{p\in{\mathbb{P}}} (1+ p^{-z}) \\ &= \prod\limits_{p\in{\mathbb{P}}} \frac{(1+ p^{-z})(1- p^{-z})}{1-p^{-z}} \\ &= \frac{\zeta(z)}{\zeta(2z)} \end{aligned} \]

其实对 \(\zeta(z) = \prod\limits_{p\in{\mathbb{P}}}\sum\limits_{i\geq 0} p^{-iz} = \prod\limits_{p\in{\mathbb{P}}}\frac{1}{1-p^{-z}}\)

然后对于 \(\zeta(2z) = \prod\limits_{p\in{\mathbb{P}}} \sum\limits_{i\geq 0} p^{-2iz} = \prod\limits_{p\in{\mathbb{P}}} [2|i]\sum\limits_{i\geq 0} p^{-iz}\) 。 所以表示完全平方数才为 \(1\)。然后杜教筛带走。

Min25

Step 1

\(\tau(n)\) 表示 \(n\) 的最小质因子。
\(p_i\) 表示第 \(i\) 小质数,特别地,\(p_0=1\)。但与一般的质数定义相同地,不认为 \(1\) 是质数。

给定完全积性函数 \(f\) 和整数 \(n\),令 \(G(n)=\sum\limits_{p \in \mathbb{P},p\leq n} f(p)\)

你需要对于所有 \(x\),求出 \(G(\lfloor\frac{n}{x}\rfloor)\)

前人的智慧告诉我们可以 dp,设 \(S(n,m)= \sum_{i=1}^n [ \left(i\in\mathbb{P}) \lor (\tau (i) > p_m\right)] f(i)\),就是满足是质数或者是\(\tau(n)>p_m\) 的前缀和。

\[S(n,m)=\begin{cases} S(n,m-1) & (p_m^2 >n) \\ S(n,m-1) - f(p_m) \left(S(\lfloor\frac{n}{p_m}\rfloor,m-1)-\sum\limits_{i=1}^{m-1} f(p_i)\right) & otherwise \end{cases} \]

然后就可以做了。

htojP5577

考虑搜索每一个分解质因数的指数 \(k\),然后单独判断 \(k=1\) 时候算答案,这个时候就是区间质数个数,大概代码长这样。

void dfs(int n,int k,int d){
    rep(i,k,tot){
        if(pr[i]*pr[i]>n)   break;
        int times=1;
        for(int j=pr[i];j*pr[i]<=n;j*=pr[i]){
            dfs(n/j,i+1,d*(times+1));
            times++;
            if(d*(times+1)<=D){
                ans[d*(times+1)]++;
            }
        }
    }
    if(2*d<=D){
        ans[2*d]+=dp[mp[n]]-k+1;
    }
}
posted @ 2026-02-25 17:58  q1uple  阅读(0)  评论(0)    收藏  举报
1