XN2025 集训记录 D5

XN2025 集训记录 D5

今天是数学啊 , 主要内容是数论 , 正好自己对这一块不太熟悉 , 正好边做题边写博客 , 把学到的东西记录一下 , 方便以后复习 .

factor 指令

直接在 bash 里面输入 factor [NUM] 就可以获取质因数分解 , 非常方便 .

看网上说接受值域在 \(2^{128}\) , 对于OI绰绰有余了 .

Exgcd

虽然费马小定理很方便 , 但是 Exgcd 可以处理更多不保证模数是质数的情况 , 也是 CRT 等的前置 .

思想其实比较简单 , 考虑先将不定方程用 gcd 的思路扩展一步

\[ax+by=\gcd(a,b)=\gcd(b,a\bmod b) \]

根据递归求解的思想 , 可以先求出关于后半部分的一个解 :

\[bx'+(a\bmod b)y'=\gcd(b,a\bmod b) \]

考虑用 \(x',y'\) 求解 \(x,y\) , 通过拆 \(\bmod\) 为除法 , 简单代换可以得出 :

\[x=y',y=x'-(a/b)y \]

其实也没那么难 , 但是确实不太熟悉就是了 .

ExCRT

CRT 是废物啊 , 只能处理素数不说 , 还要单独推结论 , 也没更好写到哪里去 . 不如更直接的 ExCRT .

其实这东西就是一个同余方程合并的办法 .

对于两个方程进行改写 :

\[x\equiv a_1 \pmod {m_1} \to x=m_1q_1+a_1 \\ x\equiv a_2 \pmod{m_2} \to x=m_2q_2+a_2 \]

即解

\[m_1q_1-m_2q_2=a_2-a_1 \]

Exgcd 解即可 , 新的模数是 \(\mathrm{lcm} (m_1,m_2)\) .

卢卡斯定理

这个不是飞舞了 , 比扩展版好写多了 .

\[\binom{n}{m} \equiv \binom{n/p}{m/p}\binom{n\bmod p}{m\bmod p} \pmod p \]

适用于 \(p\) 较小的情况 , 比较好记好写 , 不过仅限组合数可用 , 使用比较受限 .

扩展卢卡斯定理

属于是卢卡斯定理的真身 , 真正的位置在 oi-wiki 的 阶乘取模 - OI Wiki 这里 .

考虑 \(n,m\) 较大时 , 会存在 \(\frac{n!}{m!(n-m)!}\) 分数线上下同时存在 \(p\) 但是约掉了 , 为了处理这种情况 ( 同时得到一个易于处理的结构 ) , 进行变形 :

\[n!=p^{v_p(n!)}(n!)_p \]

其中 \(v_p(n!)\) 表示 \(n!\) 质因数分解后有多少个 \(p\) , 而 \((n!)_p\) 表示 \(n!\) 只保留 \(\ne p\) 的质因子时的值 . 这个变化相当于把 \(n!\) 中的所有 \(p\) 拆了出来 .

考虑对 \(v_p(n!)\) (幂次) 和 \((n!)_p\) (阶乘余数) 分别求解 .

求解阶乘余数

前置知识 : Wilson 定理

$ (p-1)!\equiv-1 \pmod p $ 当且仅当 \(p\) 为质数

Wilson 定理扩展形式

\(\prod\limits_{1\le i\le m-1 , i\perp m} i\equiv(\pm1) \pmod m\)

其中当且仅当 \(m\) 存在原根时 , 即 \(m=2,4,p^{\alpha},2p^\alpha\) 时取 \(-1\) ( \(p\) 为奇质数 ).

考虑把 \((n!)_p\) 按 \(p\) 长度分段 , 则

\[\begin{align} (n!)_p= &1\times2\times3\times4\times\cdots \times p-1 {\color{red}\times \ 1}\ \times \\& (p+1)\times(p+2)\times\cdots \times p-1 {\color{red}\times\ 2}\ \times \\& \cdots \\& (kp+1)\times(kp+2)\times \cdots n \\=& 1\times2\times3\times4\times\cdots \times p-1 {\color{red}\times \ 1}\ \times \\& 1\times2\times3\times4 \times \cdots \times p-1 {\color{red}\times\ 2}\ \times \\& \cdots \\& 1\times2\times \cdots (n\bmod p) \\=&((p-1)!)^{n/p}((n/p)!)_p(n\bmod p)! \end{align} \]

在 \(p\) 为质数情况下 , 根据 Wilson 定理 , 可以得到最终形式 :

\[(n!)_p=(-1)^{n/p}\times((n/p)!)_p\times(n\bmod p)! \]

通过预处理 \(n!(n<p)\) , 可以递归求解 , 复杂度 \(O(\log_pn)\) .

而 \(p^\alpha\) 是质数幂情况下 , 根据扩展形式 , 类似地 :

\[\begin{align} (n!)_{p^\alpha}&=(\pm 1)^{n/p^\alpha}\times((n/p)!)_p\times g(n\bmod p^\alpha) \\g(n)&=\prod\limits_{1\le i<n,i\perp p}i \ (n< p) \end{align} \]

其中当且仅当 \(p=2\) 且 \(\alpha>3\) 时取 \(1\) .

通过类似于预处理 \(n!\) 来预处理 \(g(n)\) . 类似地递归求解 .

而如果 \(p\) 不是质数幂 , 则通过质因数分解拆成若干质数幂 , 分别求解 , 最后 exCRT 合并即可 .

求解幂次

while(n){
    n/=p;
    res+=n;
}

一目了然 .

在求出 \((n!)_p\) 与 \(v_p(n!)\) 后 , 可以把 \((n!)_p\) 正常求逆元 ( 可能需要exgcd ) 合并 , 然后考虑 \(v_p(n!)\) , 通过指数加减处理 .

其实只有在上下 \(v_p\) 和相等时才有非 \(0\) 答案 , 否则必然 \(=0\) 或不存在逆元 ( 这种情况一般不出现 ) .

优势在于不仅可以处理模数非质数的情况 , 还可以用来处理形式与组合数相似但是不完全相同的情况 .

数论函数卷积结论

\[\epsilon =\mu*1\\ d=1*1 \\ \sigma=\mathrm{id}*1 \\ \varphi=\mu*\mathrm{id} \]


唉感觉这里想吹水都不知道说些什么好了 , 没啥新鲜的东西 , 数学题单又搞得头昏脑胀 . 好难受啊 .

感觉自己的状态可以用一种动能来描述 , 刚刚开始的时候动能充足 , 加上正反馈 , 感觉自己的状态很好 ; 但是逐渐感觉倒也不是想要放弃或者说不认真做了 , 但是正反馈不足了 , 拼劲也不持久 , 处于一个不上不下的状态 .

明天还是模拟赛啊 , 也不希望啥 , 就是最好能打的爽一些 , 不要搞不给样例这种让人一上来就很想摆烂的场了 .

突然好想打架子鼓 ( 无端 ) .


P10594 最大团

题意说的很不清楚 , 其实组合数学的部分比较简单 , 最后就化成 :

\[m^{\sum \limits_{d|n} \frac{n!} { (d!)^{\frac{n}{d} }(\frac{n}{d})! } } \pmod p \]

要求的就是

\[\sum \limits_{d|n} \frac{n!} { (d!)^{\frac{n}{d} }(\frac{n}{d})! } \pmod{p-1} \]

\(p-1\) 可以拆成四个质数 \(2,13,5281,7283\) ( 这就是 factor , 听 bash 说 ) , 分别对这四个素数用扩展卢卡斯的套路来一遍 , 然后 ExCRT 合并就行了 ( 没错 , 上面一堆科技就是为了这个题学的 ) .


P5572 简单的数论题

科技只到用了莫反和整除分块的"简单题"

推式子可以看题解 , 自己推的东西前一半和题解一样, 后一半是看着题解推得 ( .这里只说思路 .

首先 \(\varphi\) 里面的东西可以把 \(lcm\) 消掉 , 然后一下就可以通过积性函数分拆 ( 所以这题并不依赖 \(\varphi\) 的性质 , 任意一个容易求值的积性函数应该都行 ) .

然后是比较典的交换求和顺序 , 把 \(\gcd\) 提出来 , 用 \(\frac {i}{\gcd}\) 这种东西代换 (很套路 ) , 然后把 \(\gcd\) 枚举提前 , 目的是把带 \(i,j\) 的东西搞到一起 , 整出比较同构的形式 , 以及把 \([\gcd(i,j)=1]\) 这种东西拎出来做莫反 .

拿出莫反之后 , 仍然套路地把 \(\gcd\) 提前 , 发现这个形式已经有点像是要数论分块了 , 不过带着的 \(\varphi (ki)\) 这种东西很难受 , 而且不好继续消下去了 , 考虑预处理 , 设

\[G(n,k)=\sum\limits_{i}^{n} \varphi(ik) \]

由于我们要的是 $ G(\frac{n}{dk},k)$ 这种形式 , 所以函数取值是 调和级数的 \(O(n\log n)\) . 可以放心地预处理 .

不过到这里之后还是不好分块 , 现在的式子是这样的形式 ( 前面的自己会推的忽略了 , 后面这里比较深刻看题解会的记录一下 ) .

\[\sum\limits_n^d\sum\limits_k^{\frac{n}{d}} \mu(k)G(\frac{n}{dk},k)G(\frac{m}{dk},k) \]

考虑预处理后面的部分

\[F(n,m)=\sum\limits_k^{n} \mu(k)G(\frac{n}{k},k)G(\frac{m}{k},k) \]

这个形式比较不好处理 , 为了求 \(F(n,m)\) 还需要一层整除分块 , 那有没有别的方式能让预处理更高效一些呢 ?

答案是有的 . 枚举 \(k\) , 会使得 \(G\) 的两个自变量都与 \(k\) 有关 , 显然大大增加了内层复杂度 , 那么我们还有可以整除分块的对象 : \(dk\) , 设 \(dk=T\) , 原式可化为

\[\sum\limits_T^n\sum\limits_{k|T} \mu(k)G(\frac{n}{T},k)G(\frac{m}{T},k) \]

那么预处理 :

\[F(n,m,T)=\sum\limits_{k|T} \mu(k)G(n,k)G(m,k)\\ Ans=\sum\limits_T^n F(\frac{n}{T},\frac{m}{T},T) \]

这个形式好看了很多 . 至少可以通过在 \(n,m\) 相同的状态中调和级数转移预处理了 . 不过显然仍然无法预处理所有 \(n,m,T\) , 考虑值域分治 , \(n,m\) 在实际使用时又带入 \(\frac{n}{T}\) , 因此更多有效状态集中在 \(n,m\) 较小的部分 , 尝试处理 \(n,m\le B\) 的部分 , 注意到若钦定 \(m\ge n\) , 对于确定的 \(m\) , \(T\) 值域为 \(\frac{N}{m}\) , \(n\) 值域为 \(m\) , 所以总状态数为 \(O(NB)\) .

预处理可以用调和级数暴力做 .

考虑查询时 , 若 \(T<\frac{n}{B}\) , 只能暴力做 , 考虑用调和级数 , 复杂度 \(O(\sqrt N\log N)\) .

其余部分对 \(F(m,n,T)\) 在 \(T\) 维度做分前缀和 , 整除分块一些 , 复杂度 \(O(\sqrt N)\) .

这道题处理不断运用了交换求和 , 目的一直是获得更简洁的形式 , 直到没有化简空间 , 开始考虑预处理 , 并且再次以预处理为目的进行变化 .


ARC154E

首先考虑用前缀和地思路把每个点地贡献化成

\[(\sum\limits_j^i[P_i<P_j] - \sum\limits_{j=i+1}^n[P_i>P_j])\times i \]

然后还能进一步整理

\[\begin{align} &(i-\sum\limits_j^i[P_i>P_j] - \sum\limits_{j=i+1}^n[P_i>P_j])\times i \\=&(i- P_i)\times i \end{align} \]

然后神奇地发现每个 \(P_i\) 的贡献是独立的 !

当下只需对每个 \(P_i\) 求出其期望位置即可 , 考虑一个覆盖了 \(i\) 位置的翻转 \([l,r]\) , 会使 \(i\) 到达哪里

\[ \begin{align} &E(target_i)\\ =&E(r-(i-l))\\ =&E(l)+E(r)-i\\ =&\frac{i}{2}+\frac{n+i}{2}-i \\=&\frac{n}{2} \end{align} \]

更神奇了 , 也就是只要 \(i\) 被覆盖过一次期望位置就是 \(\frac{n}{2}\) , 只需计算被覆盖的概率 , 分别计算原 \(P_i\) 在 \(i\) 和 \(\frac{n}{2}\) 的贡献 , 最后用期望还原求和即可 .

非常有趣 , 看起来很费劲的东西推出来都是比较简单的结构 .


结果就是现在还有 20 分钟结束 , 但是我博客写完了 , 这 . . . 写题也不够了 , 坐牢了 .


唉还是模拟赛好 , 就爽做 , 拿点分是点 , 反正又不用纠结自己有没有啥收获 , 反正我一套模拟赛下去了我这一天不算摆烂 .

其实这种感觉在学算法时会更明显 , 比如今天学了个卢卡斯 , 总感觉一天任务量已经完事了 () . 不过事实证明学算法的实际效果比感觉上的效果差很多 , 还是要实践堆起来才是真正学懂 . 相比之下模拟赛还真就能撑起一天的内容 , 反正这个考场状态练到了 , 题解该看的看了 , 总结也写了 , 大比例的实践感觉上虽然好像也没会那么多东西 , 反正心态上就当自己学明白了 .


🧊 you're the love that i take ~ 🧊

🧊 you're the drug that i take ~ 🧊

🧊 will you cage me ↑ will you cage me ↑ 🧊

🧊 you're the pause in my veins ~ 🧊

🧊 you're the war that i wage ~ 🧊

🧊 can you change me↑ can you change me↑ 🧊

🧊 FROM THE MONSTER YOU MADE ME 🧊

🧊 FROM THE MONSTER YOU MADE ME ! ! ! ! 🧊

posted @ 2025-03-26 21:32  youlv  阅读(119)  评论(0)    收藏  举报