【学习笔记】类欧几里得算法
1.【学习笔记】Kruskal 重构树2.【学习笔记】网络流3.【学习笔记】高级数据结构4.【学习笔记】线性基5.【学习笔记】Link Cut Tree6.【学习笔记】字符串后缀算法7.【学习笔记】字符串回文算法8.【学习笔记】组合数学9.【学习笔记】多项式 1:基础操作10.【学习笔记】多项式 2:集合幂级数11.【学习笔记】多项式 3:多项式运算12.【学习笔记】Prufer 序列13.【学习笔记】多项式 4:生成函数14.【学习笔记】DP 套 DP15.【学习笔记】图的连通性16.【学习笔记】差分约束17.【学习笔记】长链剖分18.【学习笔记】2-SAT19.【学习笔记】根号算法20.【学习笔记】Primal-Dual 原始对偶算法21.【学习笔记】Bostan-Mori 算法22.【学习笔记】狄利克雷卷积与高级筛法23.【学习笔记】DP 优化 1:基础优化24.【学习笔记】DP 优化 2:动态 DP25.【学习笔记】李超线段树26.【学习笔记】优化建图27.【学习笔记】Segment Tree Beats28.【学习笔记】插头 DP29.【学习笔记】任意模数多项式乘法30.【学习笔记】SG 函数与 SG 定理
31.【学习笔记】类欧几里得算法
32.【学习笔记】狄利克雷前/后缀和/差分33.【学习笔记】DSU on Tree34.【学习笔记】DP 优化 3:闵可夫斯基和优化 DP35.【学习笔记】笛卡尔树36.【学习笔记】Miller-Rabin 算法37.【学习笔记】DP 优化 4:决策单调性38.【学习笔记】DP 优化 5:wqs 二分优化 DP39.【学习笔记】边分治40.【学习笔记】KMP 相关算法41.【学习笔记】概率生成函数42.【学习笔记】离散对数和剩余概述#
主要是求以下三个式子:
求 #
首先规范成 的情况,可以推得:
之后再推导:
可以经过一系列变换:
整理可以得到:
设 ,可以得到:
注意到递归过程 交换,类似欧几里得算法(因此叫类欧几里得算法),复杂度是 。
上面的推导过程重点在:
-
设立第二维并交换求和号。
-
把艾弗森括号内的式子放缩并变形,方便化简。
求 #
设 ,,类比过程。
先是取模:
之后是:
求 #
直接上过程了:
之后略微有变化,由于式子中带着平方,为了避免出现 之类的情况,使用 来改写。
于是:
注意到 的答案只和 有关,所以只递归一次即可。
点击查看代码
struct Data{
ll f,g,h;
Data()=default;
Data(ll f_,ll g_,ll h_):f(f_),g(g_),h(h_){}
};
Data solve(int a,int b,int c,int n){
Data now=Data(0,0,0),res=Data(0,0,0),last=Data(0,0,0);
ll S0=(n+1)%mod,S1=1ll*n*(n+1)%mod*inv2%mod,S2=1ll*n*(n+1)%mod*(2*n+1)%mod*inv6%mod;
int d1=a/c,d2=b/c;
a%=c,b%=c;
int m=(1ll*a*n+b)/c;
if(a) last=solve(c,c-b-1,a,m-1);
now.f=(1ll*n*m%mod-last.f+mod)%mod;
res.f=(S1*d1%mod+S0*d2%mod+now.f)%mod;
now.g=(1ll*m*n%mod*(n+1)%mod-last.f+mod-last.h+mod)%mod*inv2%mod;
res.g=(S2*d1%mod+S1*d2%mod+now.g)%mod;
now.h=(1ll*n*m%mod*(m+1)%mod-2*last.f%mod+mod-2*last.g%mod+mod-now.f+mod)%mod;
res.h=(S2*d1%mod*d1%mod+S0*d2%mod*d2%mod+now.h+2ll*d1*now.g%mod+2ll*d2*now.f%mod+2*S1*d1%mod*d2%mod)%mod;
return res;
}
参考资料#
- OI Wiki
作者:SoyTony
出处:https://www.cnblogs.com/SoyTony/p/Learning_Notes_about_Euclidean-like_Algorithm.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
合集:
学习笔记
分类:
数学/数论/类欧几里得算法
, A/学习笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效