少项式技术

news/2024/11/14 22:15:45/文章来源:https://www.cnblogs.com/caijianhong/p/18546947

其实就是一些平方暴力的多项式运算,以防某些人在数据范围允许平方时拍 NTT 上去。刚好出题用到了少项式技术就象征地总结一下。

普通幂少项式

单点求值

struct poly : vector<mint> {using vector::vector;mint operator()(const mint& x) const {auto&& f = *this;mint res = 0, now = 1;for (int i = 0; i < (int)f.size(); i++) res += now * f[i], now *= x - i;return res;}
};

整除与取模

将被除式的每一个高位,尝试用除式的某一倍数去减,使其消失。

poly operator/(poly lhs, const poly& rhs) {if (lhs.size() < rhs.size()) return {};mint iz = 1 / rhs.back();vector<mint> ret(lhs.size() - rhs.size() + 1);for (int i = (int)lhs.size() - 1; i >= (int)rhs.size() - 1; i--) {auto k = ret[i - rhs.size() + 1] = lhs[i] * iz;for (int j = 0; j < (int)rhs.size(); j++) lhs[i - j] -= rhs[rhs.size() - j - 1] * k;}return ret;
}

拉格朗日插值

根据不知道哪里来的实践经验,拉插特有的除二项式部分需要特别优化。

poly divide2(poly lhs, mint b) {vector<mint> ret(lhs.size() - 1);for (int i = (int)lhs.size() - 1; i >= 1; i--) {auto k = ret[i - 1] = lhs[i];lhs[i - 1] -= b * k;}return ret;
}
poly lagrange(const vector<pair<mint, mint>>& vec) {poly ans(vec.size()), prod{1};for (int i = 0; i < (int)vec.size(); i++) prod = prod * poly{0 - vec[i].first, 1};for (int i = 0; i < (int)vec.size(); i++) {mint den = 1;for (int j = 0; j < (int)vec.size(); j++) {if (i != j) den *= vec[i].first - vec[j].first;}auto num = divide2(prod, 0 - vec[i].first);auto k = vec[i].second / den;for (int j = 0; j < (int)vec.size(); j++) ans[j] += num[j] * k;}return ans;
}

对数与指数

【模板】子集卷积 - caijianhong - 博客园

根据求导公式比较两边系数。

下降幂少项式

单点求值

struct poly : vector<mint> {using vector::vector;mint operator()(const mint& x) const {auto&& f = *this;mint res = 0, now = 1;for (int i = 0; i < (int)f.size(); i++) res += now * f[i], now *= x - i;return res;}
};

普通幂转下降幂

使用第二类斯特林数。

从阶乘幂到斯特林数 - caijianhong - 博客园

poly nor2under(const poly& f) {poly g(f.size());for (int i = 0; i < (int)f.size(); i++) {for (int j = 0; j <= i; j++) g[j] += S[i][j] * f[i];}return g;
}
S[0][0] = 1;
for (int i = 1; i <= 2000; i++) {for (int j = 1; j <= i; j++) S[i][j] = S[i - 1][j] * j + S[i - 1][j - 1];
}

下降幂转普通幂

使用第一类斯特林数并携带某个系数。

poly under2nor(const poly& f) {poly g(f.size());for (int i = 0; i < (int)f.size(); i++) {for (int j = 0; j <= i; j++) g[j] += S1[i][j] * ((i - j) & 1 ? -1 : +1) * f[i];}return g;
}
S1[0][0] = 1;
for (int i = 1; i <= 2000; i++) {for (int j = 1; j <= i; j++) S1[i][j] = S1[i - 1][j] * (i - 1) + S1[i - 1][j - 1];
}

点值平移

\(f(x)\to f(x-b)\)。观察到下降幂也有二项式定理。

poly translate(const poly& f, int b) {poly g(f.size());for (int i = 0; i < (int)f.size(); i++) {mint now = 1;for (int j = 0; j <= i; j++) {g[i - j] += f[i] * binom(i, j) * now;now *= -b - j;}}return g;
}

有限微积分相关

有限微积分与数列求和 - 洛谷专栏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/833664.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Java+SpringBoot+Mysql在线课程学习教育系统功能设计与实现十

审核前台用户认证信息、查看所有用户、订单、发布文章、发布常见问题等。 该系统总共24张表,代码整洁,每个功能、接口上都有注释说明。 运行环境:jdk1.8、mysql5.x、eclipse/idea、maven3.5/3.6 包远程运行的哦。 特色功能:发布课程、学习课程、分享资料、资料讨论等。 部分…

基于Java+SpringBoot+Mysql在线课程学习教育系统功能设计与实现九

该系统总共24张表,代码整洁,每个功能、接口上都有注释说明。 运行环境:jdk1.8、mysql5.x、eclipse/idea、maven3.5/3.6 包远程运行的哦。 特色功能:发布课程、学习课程、分享资料、资料讨论等。 部分功能:前台课程评论信息控制器Controller、优惠卷信息控制器Controller、…

SharePoint Online页面的一些奇怪参数

前言最近,在查找资料的时候,偶然间发现了一些非常有意思的参数,如下:?env=Embedded or ?env=WebView&wdStartOn=21.正经的SharePoint Online页面2.加了参数的SharePoint Online 页面3.加了另一个参数的SharePoint Online页面结束语相信大家看效果就已经发现了,参数是…

Alpha冲刺(2/14)——2024.11.13

目录一、团队成员分工与进度二、成员任务问题及处理方式三、冲刺会议内容记录会议内容四、GitHub签入记录及项目运行截图GitHub签入记录项目运行截图五、项目开发进展及燃尽图项目开发进展燃尽图六、团队成员贡献表 一、团队成员分工与进度成员 完成的任务 完成的任务时长 剩余…

PS端Flash固化

PS端Flash固化Vivado版本:Vivado2020.2 芯片型号:RFSoC XCZU47DR 前提条件:Vitis工程编译完成,拨码开关拨到PS JTAG模式创建引导镜像 首先右键应用工程系统,点击Create Boot Image。检查镜像工程的文件是否为固化需要的工程文件,点击创建镜像的选项即可完成创建,创建完成…

Office Word 文档格式与目录样式(毕业设计论文常用)

调整格式技巧: Word 中点击 “文件”--》"选项"--》“显示”,将高亮部分全部打钩,有利于查看格式字符、 “分页符” 和“分节符” 两个很有用, 其中分节符 前后的页码是独立的。 样式间的关系: 类比 C++ 中类的继承编写的伪代码,“正文”为基类,派生出 “论文…

想不到新版的onenote配色这么好看

原来一直在用office自带的onenote,想不到新版的onenote配色这么好看。

[豪の学习笔记] 计算机网络#001

计算机网络概念、网络协议、计算机网络结构、Internet结构、电路交换、多路复用、报文交换与分组交换1.1.1 - 什么是计算机网络 计算机网络 = 通信技术 + 计算机技术计算机网络就是一种特殊的通信网络 定义:计算机网络就是互联的、自治的计算机集合 自治:无主从关系 互联:互…

第十一次作业

1、RCE:分别实现ThinkPHP、Weblogic、Shiro漏洞的利用过程> ThinkPHP: 环境搭建前端测试是否存在pearcmd,访问路径,存在的话报错就确认存在在根目录下创建magedu3.php这个文件,文件内容为<?=phpinfo()?>,10.0.0.150:8080/public/?lang=../../../../../../../.…

Python并行编程1并行编程简介(上)高频面试题:GIL进程线程协程

1 并行编程简介 首先,我们将讨论允许在新计算机上并行执行的硬件组件,如 CPU 和内核,然后讨论操作系统中真正推动并行的实体:进程和线程。随后,将详细说明并行编程模型,介绍并发性、同步性和异步性等基本概念。 介绍完这些一般概念后,我们将讨论全局解释器锁(GIL)及其…

鸿蒙NEXT开发案例:年龄计算

​ 【引言】 本案例的目标是开发一款年龄计算器应用,该应用能够根据用户输入的出生日期,计算出用户的实际年龄、虚岁、星座、生肖等信息。同时,应用还将提供距离下次公历和农历生日的天数及星期等信息。为了实现这些功能,我们将使用ArkTS和ArkUI作为开发语言,并借助@nutpi…

Dosbox-x安装WinXP——图文教程

很多老游戏只能在win95、98或者XP中运行,因此,很多人尝试将Win95、98安装到Dosbox中,利用Dosbox来玩那些久远的情怀。有Win98自然就有人想在Dosbox中安装更高级的Win系统,于是就有人尝试在Dosnox中安装Win2000、WinXP的,其中2023-07-03在国外的fabulous.systems出现了一篇…