首页 > 其他分享 >数论

数论

时间:2023-04-29 17:22:54浏览次数:28  
标签:lfloor frac 数论 sum rfloor mu 复杂度

莫反,欧拉反演

常用结论:

  • \(\mu*1=\epsilon,\varphi*1=id\).
  • \(\mu^2(n)=\sum_{d^2|n}\mu(d)\).
  • \(d(ij)=\sum_{x|i}\sum_{y|j}[gcd(x,y)=1]\).
  • \(\varphi(xy)=\frac{\varphi(x)\varphi(y)\gcd(x,y)}{\varphi(\gcd(x,y))}\).

杜教筛

积性函数 \(f=g*h\),它们的前缀和分别是 \(F,G,H\),思路是将 \(F(n)\) 写出然后交换求和号枚举 \(h\):

\[\begin{aligned} F(n)&=\sum_{i=1}^n\sum_{d|i}h(d)g(\frac{i}{d})\\ &=\sum_{d=1}^n h(d)\sum_{i=1}^{\left\lfloor \frac{n}{d}\right\rfloor}g(i)\\ &=\sum_{d=1}^{n}h(d)G(\left\lfloor \frac{n}{d}\right\rfloor) \end{aligned} \]

杜教筛说的是,欲求 \(G(n)\),将 \(d=1\) 这一项单独拎出来移项,这样就有 \(h(1)G(n)=F(n)-\sum_{d>1}^nh(d)G(\left\lfloor \frac{n}{d}\right\rfloor)\),对右边整除分块,这要求 \(F\) 和 \(H\) 都能快速算出。

这相当于求出 \(g\) 的所有基本和组处的取值,然后对于这些位置继续往下递归它们的基本和组。需要记忆化搜索剪枝。

现在来算复杂度,注意到基本和组的基本和组依然属于原先的基本和组,也就是 \(\lfloor\frac{\lfloor\frac{n}{a}\rfloor}{b}\rfloor=\lfloor\frac{n}{ab}\rfloor\),依据整除分块,复杂度实际上是 \(\sum_{i=1}^{\sqrt n}(\sqrt i+\sqrt{\frac{n}{i}})\),不难积分出复杂度为 \(\mathcal{O}(n^{3/4})\).

如果能线性筛预处理出 \(G\) 在 \(n\) 比较小的时候的前缀和,取 \(B= \mathcal{O}(n^{2/3})\),这样复杂度中 \(\sqrt i\) 直接查表就能直接去掉,而要保证 \(\frac{n}{i}\geq n^{2/3}\) 那么 \(i\leq n^{1/3}\),这样复杂度就是 \(\sum_{i=1}^{n^{1/3}}\sqrt{\frac{n}{i}}= \mathcal{O}(n^{2/3})\).

  1. \(f=g*h,F(n)=\sum_{d=1}^n h(d)G(\left\lfloor \frac{n}{d}\right\rfloor)\).
  2. 求 \(G(n)\),移项,基本和组往下递归。
  3. 直接递归复杂度 \(\mathcal{O}(n^{3/4})\),小的部分线性筛预处理,复杂度是 \(\mathcal{O}(n^{2/3})\).

Powerful number 筛

Powerful number 是指标准分解中质因数的指数均 \(>1\) 的数,其一定能表示成 \(a^2b^3\) 的形式,如果让 \(b\) 中无平凡因子那么这个表示就是唯一的。那么现在就可以来估计一下 \(n\) 以内 pn 的个数:\(\sum_{b=1}^{\sqrt[3]{n}}\frac{n}{b^2}\),积分一下就得到 \(\mathcal{O}(n^{1/2})\).

Powerful number 筛的核心式子与杜教筛完全一致 \(F(n)=\sum_{d=1}^n h(d)G(\left\lfloor \frac{n}{d}\right\rfloor)\).现在想求 \(F(n)\),构造 \(g\) 使得 \(g\) 和 \(f\) 在素数次幂处的取值完全相同,由于 \(f=g*h\) 可看出 \(h\) 仅在 powerful number 处有值。如果 \(G\) 能快速算出,\(h(d)\) 根据 \(f=g*h\) 也能快速算出,这样只需要暴力 dfs 枚举所有 powerful number 作为 d,然后计算 \(f\),这样复杂度就是 \(\mathcal{O}(n^{1/2})\) 的了。

  1. \(f=g*h,F(n)=\sum_{d=1}^n h(d)G(\left\lfloor \frac{n}{d}\right\rfloor)\).
  2. 求 \(F(n)\),构造 \(g\) 使得 \(f,g\) 在 \(p^k\) 处取值相同,这样 \(h\) 仅在 pn 处有取值。
  3. 直接 dfs 枚举所有 \(d\) 计算 \(F(n)\) 即可。复杂度是 pn 个数 \(\mathcal{O}(\sqrt n)\).

贝尔级数

对于积性函数 \(f\) 其质数 \(p\) 对应的贝尔级数 \(\sum\limits_if(p^i)x^i\),积性函数的狄利克雷卷积就对应贝尔级数的普通卷积,可以用来构造杜教筛需要的函数。

  • \(\epsilon_p(x)=1\).
  • \(I_p(x)=\frac{1}{1-x}\).
  • \((id_k)_p(x)=\sum_{i\geq 0}p^{ik}x^i=\frac{1}{1-p^kx}\).
  • \(\mu=I^{-1}\):\(\mu_p(x)=1-x\),前面是狄利克雷乘法逆,这也说明为什么 \(\mu\) 本质上是在质因子维度上作容斥(类比 ogf \(1-x\) 是在作差分)。
  • \((\mu^2)_p(x)=1+x\),这里 \(\mu^2\) 是点乘。
  • \(\varphi=id*\mu\):\(\varphi_p(x)=\frac{1-x}{1-px}\).
  • \(d=\sigma_0=I*I\):\(d_p(x)=\frac{1}{(1-x)^2}\).
  • \(\sigma_k=I*id_k\):\((\sigma_k)_p(x)==\frac{1}{(1-x)(1-p^kx)}\).

例题

DIVCNT2

求 \(\sum_{i=1}^n d(i^2)\).

\(f(i)=d(i^2)\) 的贝尔级数是 \(<1,3,5,....>=\frac{1+x}{(1-x)^2}\),于是 \(f=\mu^2 * d\).

\(\mu^2(n)=\sum_{i=1}^{\sqrt n}\mu(i)\lfloor\frac{n}{i^2}\rfloor\) 可以整除分块算。

\(d=1 * 1\) 的前缀和可以化成 \(\sum_{d=1}^{n}\lfloor\frac{n}{d}\rfloor\) 然后整除分块算。

我们知道基本和组的基本和组依然是基本和组,所以记忆化搜索,小的线性筛出来,复杂度就是 \(\mathcal{O}(n^{2/3})\) 的了。

标签:lfloor,frac,数论,sum,rfloor,mu,复杂度
From: https://www.cnblogs.com/do-while-true/p/17364277.html

相关文章

  • 数论基础1-整数的离散型
    例题一:例题二:例题三:例题四: ......
  • 初等数学瞎扯Ⅲ:数论函数与筛法
    0.前置知识与基本定义\([op]\):值为\(1\)当且仅当方括号内条件为真。记为艾弗森括号唯一分解定理:一个正整数\(x\)可以被唯一分解为\(\prod\limits_{i=1}^mp_i^{c_i}\),其中\(\foralli\in[1,m],p_i\in\mathbb{P}\)。(关于\(\mathbb{P}\),详见初等数学瞎扯Ⅰ:同余相关)。......
  • codeforces 2B B. The least round way(dp+数论)
    题目链接:codeforces2B题目大意:给出一个n*n的矩阵,从左上角走到右下角,只能向右或向下走,问路径上的数之积末尾0最少的方案是什么。题目分析:首先我们要做两个预处理,处理出每个位置上的数包含多少个2的质因子和多少个5这个质因子然后我们统计路径上弄到最少的2的方案数和最少的5的方案......
  • codeforces 264B B. Good Sequences(dp+数论)
    题目链接:codeforces264B题目大意:给出n个数,利用这n个数构造一个好的序列,好的序列是单调增的,而且序列中相邻的两个元素都不互质,问最长的好序列的长度是多少。题目分析:首先我们定义状态dp[i]表示当前的数进行构造的序列末尾的数的质因数包含i的时候的最长的情况。然后我们从小到大枚......
  • codeforces 225B B. Well-known Numbers(数论+二分+贪心+构造)
    题目链接:codeforces225B题目大意:定义f(k,n)为类似菲波那契数推导,只不过变为前k项的和,然后给出一个数s,利用k-菲波那契数构造出一个不重复的集合的元素和为s,集合的规模大于1题目分析:首先因为菲波那契数的增长速度快的吓人,所以给的数据范围109很快就能达到,我们得到O(n)的构造出所有的......
  • CodeForces - 616E Sum of Remainders (数论)大数取余求和 好题
    CodeForces-616ESumofRemaindersTimeLimit: 2000MS MemoryLimit: 262144KB 64bitIOFormat: %I64d&%I64uSubmit StatusDescriptionCalculatethevalueofthesum: nmod1 + nmod2 + nmod3 +...+ nmodm.Astheresultcanbeve......
  • OI 数论中的上界估计与时间复杂度证明
    预备0.1渐进符号其实不少高等数学/数学分析教材在讲解无穷小的比较时已经相当严谨地介绍过大O、小O记号,然而各种历史习惯记法的符号滥用(abuseofnotation)[1]直到现在都让笔者头疼.Thesenotationsseemtobeinnocent,butcanbecatastrophicwithoutcarefulm......
  • 洛谷P1249最大乘积,数论找规律
    最大乘积题目描述一个正整数一般可以分为几个互不相同的自然数的和,如\(3=1+2\),\(4=1+3\),\(5=1+4=2+3\),\(6=1+5=2+4\)。现在你的任务是将指定的正整数\(n\)分解成若干个互不相同的自然数的和,且使这些自然数的乘积最大。输入格式只一个正整数\(n\),(\(3\leqn\leq10000\))。......
  • sagemath初等数论
    SageMath是一个覆盖许多数学功能的应用软件,包括代数、组合数学、图论、计算数学、数论、微积分和统计。 安装sagemath(ubuntu)sudoaptinstallsagemath在命令行输入sage启动sagemath输入tutorial或manual()打开离线文档 素数测试sage:inverse_mod(3,2005)1337......
  • [P4317 花神的数论题]题解
    P4317花神的数论题【数位DP】题目描述最开始其实没有什么想法第一次遇见数位dp求相乘的题想就按照常规做法来做,但不知道如何去处理*于是写了一个错误的代码//当前枚举到第id位,前面的1的个数为sum,是否达到上限limitlldfs(intid,intsum,intlimit){//1.出口if(id==......