筛子题
T1
Statement
求出 \(\gcd(n,k)\) 的线性筛递推式,并证明复杂度是线性的。
Solution
T2
Statement
求出 \(d(n)=\sigma_0(n)\) 即 \(n\) 的约数个数的线性筛递推式。
Solution
\(\text A(n)\) 表示 \(n\) 的最小质因子次数,\(\text{PA}(n)\) 表示 \(\text P(n)^{\text A(n)}\),这两个东西可轻易 \(\mathcal O(n)\) 求出
T3
Statement
求出 \(\sigma_k(n)=\sum_{i\mid n}i^k\) 的线性筛递推式,并证明复杂度是线性。
Solution
\(n\) 以内共 \(\mathcal O(\frac n{\ln n})\) 个质数,对于每个质数 \(p\) 花 \(\mathcal O(\log k)\) 求出 \(p^k\),然后用 \(p^k\) 依次求出 \((p^k)^i=(p^i)^k\),最坏情况下 \(p^k=2\) 时共乘 \(\mathcal O(\log n)\) 次,所以一共 \(\mathcal O(n)\)。
T4
Statement
求 \(\text{id}_k(n)=n^k\) 的线性筛递推式,并证明复杂度是线性。
Solution
\(n\) 不是质数时 \(\text{id}_k(\frac n{\text P(n)})\) 和 \(\text{id}_k(\text P(n))\) 都已求出;
\(n\) 是质数时共有 \(\mathcal O(\frac n{\ln n})\) 个这样的 \(n\),每次用 \(\log k\) 算出 \(n^k\),乘起来 \(\mathcal O(n)\).
T5
Statement
求 \(n\varphi(n)\) 的线性筛递推式。
Solution
令 \(g(n)=n\varphi(n)\)
则对于任意 \(x,y\) 满足 \(\gcd(x,y)=1\),有 \(g(xy)=xy\cdot\varphi(xy)=x\varphi(x)\cdot y\varphi(y)=g(x)\cdot g(y)\)
故 \(g(n)\) 有积性
T6
Statement
求 \(d(n)\gcd(n,k)\) 的线性筛递推式,并证明复杂度是线性。
Solution 1
令 \(g(n)=d(n)\gcd(n,k)\)
对于 \(x,y\) 满足 \(\gcd(x,y)=1\),\(\gcd(xy,k)=\gcd(x,k)\cdot\gcd(y,k)\),
因为 \(x\) 和 \(y\) 的质因子组成互不重叠,故 \(x\) 与 \(k\) 的最大公共质因子部分和 \(y\) 与 \(k\) 的最大公共质因子部分互不重叠,由此上式成立
而 \(d(n)\) 显然积性,故 \(g(xy)=d(xy)\cdot\gcd(xy,k)=d(x)\gcd(x,k)\cdot d(y)\gcd(y,k)=g(x)\cdot g(y)\)
故 \(g(n)\) 有积性
\(h(n)\) 表示 \(k\) 中 \(\text P(n)\) 的指数(分解质因数复杂度 \(<\mathcal O(n)\),故 \(\text P(n)^{h(n)}\) 可以在 \(\mathcal O(n)\) 之内计算)
Solution 2
令 \(f_1(n)=d(n)\),\(f_2(n)=\gcd(n,k)\),这两个式子在之前的问题中已经 \(\mathcal O(n)\) 解决
\(d(n)\gcd(n,k)=f_1(n)f_2(n)\)