拉格朗日反演
1.幂级数的复合
对于幂级数和,我们称为幂级数F和G的复合
2.复合逆:
如果和满足则称它们互为复合逆
3.拉格朗日反演:
如果和互为复合逆,则有
可以通过这个在(多项式exp和ln求快速幂,巨大常数)或(倍增快速幂,小常数)来求复合逆的某一项(如果求整个复合逆的最优复杂度为的大步小步思想)
一下为多项式倍增快速幂取模和拉格朗日反演的板子,可以配合ghj1222的多项式板子食用
void poly_qpow(int *a, int len, int n)
{
int *tmp = new int[len * 2];
for (int i = 0; i < len * 2; i++) tmp[i] = i >= len ? 0 : a[i], a[i] = (i == 0);
while (n > 0)
{
ntt(tmp, len * 2, 1);
if (n & 1)
{
ntt(a, len * 2, 1);
for (int i = 0; i < len * 2; i++) a[i] = a[i] * (long long)tmp[i] % p;
ntt(a, len * 2, -1);
for (int i = len; i < len * 2; i++) a[i] = 0;
}
for (int i = 0; i < len * 2; i++) tmp[i] = tmp[i] * (long long)tmp[i] % p;
ntt(tmp, len * 2, -1);
for (int i = len; i < len * 2; i++) tmp[i] = 0;
n >>= 1;
}
delete []tmp;
}
int lagrange_inversion(int *aa, int len, int n)
{
int *a = new int[len * 2];
for (int i = 0; i < len; i++) a[i] = aa[i];
for (int i = len; i < len * 2; i++) a[i] = 0;
for (int i = 1; i < len; i++) a[i - 1] = a[i];
poly_inv(a, len);
poly_qpow(a, len, n);
int ans = a[n - 1] * (long long)qpow(n, p - 2) % p;
delete []a;
return ans;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
· 用 DeepSeek 给对象做个网站,她一定感动坏了
· .NET 8.0 + Linux 香橙派,实现高效的 IoT 数据采集与控制解决方案
· .NET中 泛型 + 依赖注入 的实现与应用