首页 > 其他分享 >万能欧几里得 学习笔记

万能欧几里得 学习笔记

时间:2023-06-17 11:33:35浏览次数:47  
标签:lfloor frac cntB cntA text 欧几里得 笔记 rfloor 万能

题目

先放板子:

求 \(\sum\limits_{x=1}^{L}{A^xB^{\lfloor \frac{Px+R}{Q} \rfloor}}\),其中 \(L,P,Q,R \leq 10^{18}\)

现在看来这个问题比较棘手,不过我们可以先从一些简单的东西入手。


思想

考虑这样一条直线 \(y=\frac{Px+R}{Q}(0 \leq R < Q)\),将它在平面直角坐标系中画出来,可以看见它会穿过若干个格子:

如上图就是 \(y=\frac{2x+2}{5}\) 的例子。我们将格子向右延伸称作 \(R\),向上延伸称作 \(U\),若直线碰到格点,则视作先向上再向右,则在这条直线上的格子延伸情况即为 \(\text{RURRURRRUR}\dots\)

不难发现,这个字符序列满足在第 \(x\) 个 \(\text{R}\) 前,有恰好 \(\lfloor \frac{2x+2}{5} \rfloor\) 个 \(\text{U}\) 在它前面,根据定义不难证明。

推广到一般函数,我们可以得到这个序列的又一个定义,即:满足第 \(x\) 个 \(\text{R}\) 前恰好有 \(\lfloor \frac{Px+R}{Q} \rfloor\) 个 \(\text{U}\) 的序列。这个定义能够帮助我们更理性地对待以后的问题,而不是在坐标系上随便画画感性理解。


现在的问题就是,如何求 \(x \leq L\) 时的序列?

换句话说,假设 \(\text{U}\) 和 \(\text{R}\) 都是一个支持合并的信息(有结合律但不一定有交换律),我们想要求出这个序列最终的值,其中这个序列满足上面的定义,有恰好 \(L\) 个 \(\text{R}\),且最后一个操作就是 \(\text{R}\)

以下分两种情况讨论:

  1. \(P \geq Q\)

不妨设 \(P=kQ+P'(0 \leq P' < Q)\),根据定义,可以得到第 \(x\) 个和 第 \(x-1\) 个 \(\text{R}\) 之间 \(\text{U}\) 的个数为:

\[\lfloor \frac{Px+R}{Q} \rfloor-\lfloor \frac{P(x-1)+R}{Q} \rfloor \]

\[=\lfloor \frac{P'x+R}{Q} \rfloor+kx-\lfloor \frac{P'(x-1)+R}{Q} \rfloor-k(x-1) \]

\[=\lfloor \frac{P'x+R}{Q} \rfloor-\lfloor \frac{P'(x-1)+R}{Q} \rfloor+k \]

这就相当于在 \(y=\frac{P'x+R}{Q}\) 的基础上,每一段 \(\text{U}\) 后面都额外补上 \(k\) 个 \(\text{U}\)。直接令 \(P \leftarrow P',\text{R} \leftarrow \text{U}^k\text{R}\) 即可。

  1. \(P<Q\)

这部分比较繁琐,我们希望交换 \(P\) 和 \(Q\) 的地位来继续递归下去。根据第 \(x\) 个 \(\text{R}\) 前有 \(\lfloor \frac{Px+R}{Q} \rfloor\) 个 \(\text{U}\),我们可以知道第 \(x\) 个 \(\text{U}\) 前有多少个 \(\text{R}\)。具体地,可以列出式子:

\[\lfloor \frac{Pi+R}{Q} \rfloor < x \]

\[\frac{Pi+R}{Q} < x \]

\[i < \frac{Qx-R}{P} \]

\[i < \lceil \frac{Qx-R}{P} \rceil \]

\[i \leq \lceil \frac{Qx-R-P}{P} \rceil \]

\[i \leq \lfloor \frac{Qx-R-1}{P} \rfloor \]

但是,这还不满足我们前面提到的序列定义的要求。

第一点,\(-R-1 \notin [0,P)\),根据定义理解,就是第 \(0\) 个 \(\text{U}\) 前理应有 \(0\) 个 \(\text{R}\),但这里有 \(\lfloor \frac{-R-1}{P} \rfloor\) 个,竟然是个负数!所以我们可以把第一个 \(\text{U}\) 前面的部分截掉单独处理,后面就能满足要求了。第一个 \(\text{U}\) 前面有 \(\lfloor \frac{Q-R-1}{P} \rfloor\) 个 \(\text{R}\),所以前面先乘上 \(\text{R}^{\lfloor \frac{Q-R-1}{P} \rfloor}\text{U}\)。至于后面,第 \(i+1\) 个 \(\text{U}\) 变成了第 \(i\) 个 \(\text{U}\),所以现在的函数变成了 \(y=\frac{Qx+Q-R-1}{P}\),又因为前面 \(\lfloor \frac{Q-R-1}{P} \rfloor\) 个 \(\text{R}\) 被截掉了,所以所有 \(\text{U}\) 前面 \(\text{R}\) 的个数都应该减掉 \(\lfloor \frac{Q-R-1}{P} \rfloor\),原函数就变成了 \(y=\frac{Qx+Q-R-1}{P}-\lfloor \frac{Q-R-1}{P} \rfloor=\frac{Qx+(Q-R-1)\%P}{P}\)。

第二点,\(L\) 的限制怎么办,我们希望转换后最后一个操作是 \(\text{U}\),才能继续递归下去。我们知道总共有 \(m=\lfloor \frac{PL+R}{Q} \rfloor\) 个 \(\text{U}\),所以可以将第 \(m\) 个 \(\text{U}\) 后面的 \(L-\lfloor \frac{Qm-R-1}{P} \rfloor\) 个 \(\text{R}\) 单独处理,即最后再乘上 \(\text{R}^{L-\lfloor \frac{Qm-R-1}{P} \rfloor}\)。注意 \(m=0\) 要特判。

经过掐头去尾的操作后,我们成功将 \(P,Q\) 和 \(\text{U},\text{R}\) 交换地位了,继续递归下去即可。边界即为 \(L=0\)。


核心代码

node solve(ll P,ll Q,ll R,ll L,node A,node B){
	if(!L) return I;
	if(P>=Q) return solve(P%Q,Q,R,L,A,mpow(A,P/Q)*B);
	ll m=((__int128)P*L+R)/Q;
	if(!m) return mpow(B,L);
	return mpow(B,(Q-R-1)/P)*A*solve(Q,P,(Q-R-1)%P,m-1,B,A)*mpow(B,L-((__int128)Q*m-R-1)/P);
} 

其中的 \(A\) 就是 \(\text{U}\),\(B\) 就是 \(\text{R}\),\(I\) 是单位元。

那会这玩意要怎么过上面的模板题呢?容易发现题目的 \(A\) 就很像我们的 \(\text{R}\),\(B\) 就很像我们的 \(\text{U}\)。

于是设三元组 \((cntA,cntB,ans)\) 表示目前这个序列有多少个 \(\text{R}\),多少个 \(\text{U}\),以及答案是什么。

合并就是 \((cntA_1,cntB_1,ans_1)\times (cntA_2,cntB_2,ans_2) = (cntA_1+cntA_2,cntB_1+cntB_2,ans_1+A^{cntA_1}ans_2B^{cntB_1})\)。

显然记 \(cntA,cntB\) 不如记 \(A^{cntA},B^{cntB}\),于是复杂度为 \(\mathcal O(n^3\log\max(P,Q))\),\(n^3\) 为矩阵乘法的复杂度。

由上述过程可以看出,我们只需要将 \(\text{U}\) 和 \(\text{R}\) 根据题目赋上符合要求的信息,之后无脑套板子就行了,这就是它相比类欧的优势之处。


参考资料

标签:lfloor,frac,cntB,cntA,text,欧几里得,笔记,rfloor,万能
From: https://www.cnblogs.com/AFewSuns/p/17486499.html

相关文章

  • Fourier Analysis and Nonlinear Partial Differential Equations 阅读笔记 (第一章)
    实分析基础Holder与卷积不等式首先从经典的Holder不等式入手.命题:经典情况下的Holder不等式设\((X,\mu)\)是测度空间,\((p,q,r)\in[1,\infty]^3\)满足\[\frac{1}{p}+\frac{1}{q}=\frac{1}{r}\]如果\((f,g)\inL^p(X,\mu)\timesL^q(X,\mu)\),则\(f\cdotg\inL^r(X,\m......
  • UE/C++简单功能实现笔记
    本篇笔记主要用于记录如何利用C++在虚幻引擎5中实现一些基本的功能需求。目录实现功能与代码构造函数中添加物体运行时添加C++Actor运行时设置动态材质及参数蓝图调用C++函数蓝图访问C++成员C++调用用户控件蓝图函数播放wav格式音效实现功能与代码以下代码均来自我的跳棋小游......
  • 计算机底层的秘密读书笔记之一
    计算机底层的秘密读书笔记之一摘要上周天在家休息时在知乎上面看到了影响性能的几个场景.里面见到了cache的乒乓问题,以及cacheline的伪共享问题.知乎的答案里面图文并茂.作者的思路也很清晰就顺着水印找到了公众号还有作者刚出版的一本书.京东周一快递到手后,这几天晚......
  • 斜率优化dp 学习笔记
    斜率优化dp引入首先,我们考虑一种更简单的dp优化——单调队列优化。比如,一个dp式形如:\[dp_{i}=\min_{k\leqj\leqi}(dp_j+f_j+g_i)\]我们发现,这个式子可以通过拆分(wgj:分离变量),变形成如下式子:\[dp_{i}=\min_{k\leqj\leqi}(dp_j+f_j)+g_i\]怎么样?我们发现,取最小......
  • 日语语法学习笔记
    对应课程名词谓语句~だ只能接终助词或句号否定:~ではない疑问:~(か)~です对听话人礼貌否定:~ではありません疑问:~ですか~ですか、~ですか:前升后降~である正式场合对听话人礼貌:~であります~でございます敬语,郑重~は/が格助词は:强调主语が:强调宾语......
  • 【笔记】韦达定理的定义与证明
    前言已知,一元二次方程\(ax^2+bx+c=0\)\((a,b,c\in\mathbb{R},a\not=0)\)有如下求根公式:\[\Delta=b^2-4ac\]\[x_{1,2}=\frac{-b\pm\sqrt{\Delta}}{2a}\]当\(\Delta<0\)时,方程无实数根;当\(\Delta=0\)时,方程有两个相等的实数根(\(x_{1}=x_{2}\));当\(\D......
  • [学习笔记] 位运算
    〇、基础位运算与运算/AND语法:a&b。计算方法:按位计算AND。运算:1&1=1,1&0=0,0&1=0,0&0=0。或运算/OR语法:a|b。计算方法:按位计算OR。运算:1|1=1,1|0=1,0|1=1,0|0=0。异或运算/XOR语法:a^b。计算方法:按位计算XOR。运......
  • 算法学习笔记(25): 矩阵树定理
    矩阵树定理本文不作为教学向文章。比较好的文章参考:矩阵树-定理以及凯莱公式【学习笔记】矩阵树定理(Matrix-Tree)_繁凡さん的博客-CSDN博客矩阵树定理入土-ixRic的博客-洛谷博客对于无向图无向图中应该是矩阵树定理的常用场景。无向图的矩阵树定理讲的是:......
  • 【React工作记录一百零八】前端小知识点扫盲笔记记录9
    前言我是歌谣放弃很容易但是坚持一定很酷微信公众号关注前端小歌谣带你进入前端巅峰交流群今天继续对前端知识的小结如何截取字符串<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge">......
  • 【React工作记录一百零九】前端小知识点扫盲笔记记录10
    前言我是歌谣放弃很容易但是坚持一定很酷微信公众号关注前端小歌谣带你进入前端巅峰交流群今天继续对前端知识的小结对称数<!DOCTYPEhtml><htmllang="en"> <head> <metacharset="UTF-8"/> <metahttp-equiv="X-UA-Compatible"content="IE=edge"/>......