【模板】集合幂级数操作(逐点牛顿迭代法)

news/2025/3/12 16:43:38/文章来源:https://www.cnblogs.com/caijianhong/p/18767899

【模板】集合幂级数操作(逐点牛顿迭代法)

正常写法:【模板】子集卷积 - caijianhong - 博客园

由伟大的 Elegia 提出的 Point-wise Newton Iteration(逐点牛顿迭代法):Optimal Algorithm on Polynomial Composite Set Power Series - Codeforces

其它参考资料:feat(math/poly/sps.md): 增加集合幂级数 by hly1204 · Pull Request #5438 · OI-wiki/OI-wiki

以下是集合幂级数的 \(\log\) 的代码实现:注意此写法常数较大!

void fwt(mint vec[], int len, int op) {/*{{{*/if (op == +1) {for (int i = 1; i < len; i <<= 1) {for (int S = i; S < len; S = (S + 1) | i) vec[S] += vec[S ^ i];}} else {for (int i = 1; i < len; i <<= 1) {for (int S = i; S < len; S = (S + 1) | i) vec[S] -= vec[S ^ i];}}
}/*}}}*/
void subset_conv(mint lhs[], mint rhs[], mint res[], int len) {/*{{{*/int n = bitctz(len);vector<vector<mint>> f(n + 1, vector<mint>(1 << n));vector<vector<mint>> g(n + 1, vector<mint>(1 << n));for (int i = 0; i < 1 << n; i++) f[popc(i)][i] = lhs[i];for (int i = 0; i < 1 << n; i++) g[popc(i)][i] = rhs[i];for (int i = 0; i <= n; i++) fwt(f[i].data(), 1 << n, +1);for (int i = 0; i <= n; i++) fwt(g[i].data(), 1 << n, +1);vector<vector<mint>> h(n + 1, vector<mint>(1 << n));for (int i = 0; i <= n; i++) {for (int j = 0; j <= i; j++) {for (int k = 0; k < 1 << n; k++) h[i][k] += f[j][k] * g[i - j][k];}}for (int i = 0; i <= n; i++) fwt(h[i].data(), 1 << n, -1);for (int i = 0; i < 1 << n; i++) res[i] = h[popc(i)][i];
}/*}}}*/
void subset_conv3(mint lhs[], mint rhs[], mint mhs[], mint res[], int len) {/*{{{*/int n = bitctz(len);vector<vector<mint>> f(n + 1, vector<mint>(1 << n));vector<vector<mint>> g(n + 1, vector<mint>(1 << n));vector<vector<mint>> m(n + 1, vector<mint>(1 << n));for (int i = 0; i < 1 << n; i++) f[popc(i)][i] = lhs[i];for (int i = 0; i < 1 << n; i++) g[popc(i)][i] = rhs[i];for (int i = 0; i < 1 << n; i++) m[popc(i)][i] = mhs[i];for (int i = 0; i <= n; i++) fwt(f[i].data(), 1 << n, +1), fwt(g[i].data(), 1 << n, +1);for (int i = 0; i <= n; i++) fwt(m[i].data(), 1 << n, +1);vector<vector<mint>> h(n + 1, vector<mint>(1 << n));for (int i = 0; i <= n; i++) {for (int j = 0; j <= i; j++) {for (int k = 0; k < 1 << n; k++) h[i][k] += f[j][k] * g[i - j][k];}}swap(h, f);for (int i = 0; i <= n; i++) memset(h[i].data(), 0, sizeof(mint) << n);for (int i = 0; i <= n; i++) {for (int j = 0; j <= i; j++) {for (int k = 0; k < 1 << n; k++) h[i][k] += f[j][k] * m[i - j][k];}}for (int i = 0; i <= n; i++) fwt(h[i].data(), 1 << n, -1);for (int i = 0; i < 1 << n; i++) res[i] = h[popc(i)][i];
}/*}}}*/
void sps_inv(mint vec[], mint res[], int len) {int n = bitctz(len);res[0] = 1 / vec[0];for (int i = 0; i < n; i++) {//  subset_conv(vec + (1 << i), res, res + (1 << i), 1 << i);//  subset_conv(res + (1 << i), res, res + (1 << i), 1 << i);subset_conv3(vec + (1 << i), res, res, res + (1 << i), 1 << i);for (int j = 1 << i; j < 2 << i; j++) res[j] *= -1;}
}
void sps_log(mint vec[], mint res[], int len) {int n = bitctz(len);assert(vec[0] == 1);res[0] = 0;vector<mint> inv(len);sps_inv(vec, inv.data(), len);for (int i = 0; i < n; i++) {subset_conv(vec + (1 << i), inv.data(), res + (1 << i), 1 << i);}
}

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

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

相关文章

如何在 Windows 上实现免密登录 Linux 服务器?

一、环境准备本地系统:Windows 10/11(需启用 OpenSSH 客户端)远程服务器:任意 Linux 发行版(需开启 SSH 服务)工具:系统自带 PowerShell 或 Git Bash(推荐)二、操作步骤 步骤 1:在 Windows 上生成 SSH 密钥对打开 PowerShell 或 Git Bash按 Win + S 搜索 "Power…

Cartesia 升级 TTS 模型,可在音频中无缝填充内容;索尼 AI 游戏角色原型:结合语音与动画,与玩家实时对话丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 技术 」、「有亮点的 产品 」、「有思考的 文章 」、「有态度的 观点 」、「有看点的 活动 」,但内容仅代表编辑…

NocoBase vs OutSystems:低代码平台,开源还是闭源?

开源 vs. 闭源,哪个低代码平台更适合你?NocoBase vs OutSystems 全面对比,揭示核心功能、成本和扩展性,帮你做出最佳选择!原文链接:https://www.nocobase.com/cn/blog/nocobase-vs-outsystems 引言 我在之前已经写过几篇产品深度对比文章,欢迎感兴趣的朋友前往阅读。Noc…

英格索兰/鑫磊/阿特拉斯空压机数据采集联网远程监控方案温湿度露点

RS132ie-A7.5(英格索兰)RS132ie-A7.5(英格素兰)XLPM175A-IID(鑫磊)GA132-8.5(阿特拉斯)GA132-8.5(阳牛)RS132ie-A7.5(英格索兰)XPM175A-IID(鑫磊)RS132ie-A7.5(英格索兰XLPHI7SA IID (套名)RS1321e-A7.5(英格系兰)XPU175A IID美号RS132ie-A7.5(大格索)RS1321e-A7.5(英格索二RS1…

SpringSecurity5(2-自定义用户信息)

Spring Security允许自定义用户信息以满足特定的认证需求。通过实现UserDetailsService接口,可以从数据库或其他存储源加载用户信息。自定义UserDetails类,提供用户名、密码、权限等信息,并结合Spring Security的AuthenticationManager进行身份验证。这样可以灵活地实现复杂…

No.60 Vue---事件处理

一、事件处理 1.1 监听事件(添加事件)我们可以使用 v-on 指令 (通常缩写为 @ 符号)来监听 DOM 事件,并在触发事件时执行一些JavaScript。用法为v-on:click="methodName”或使用快捷方式 @click="methodName”.<template><div><button v-on:click=&…

基于TPM的远程认证之一(TCG文档-验证篇)

PCR值验证 在PCR值足够静态或者验证者有证明者的PCR标准值的情况下,可以使用PCR值验证的方式验证平台的可信度。在PCR复合验证中,这种方法要求验证者拥有一个固定的断言PCR复合值列表,这样证明者就只发送报价(带有PCR值的哈希值),而不必发送完整的PCR值或事件日志。或者,…

day:19 html实战2

一、链接标签 1、定义: 从一个网页指向另一个网页的目的地,这个目标可以是一个网页,也可以图片,一个文件,一个网站等 2、链接的类型 a、生成信廉基覆盖源链接 b、新开一个窗口 c、图片链接 d、死链接 3、链接操作代码:链接标签百度(覆盖原有窗口) 京东(另开一个窗口)死…

数据采集仪 传感器采集读数仪 兼容多类型振弦、电压、电流传感器 分组存储与自动导出

数据采集仪 传感器采集读数仪 兼容多类型振弦、电压、电流传感器 分组存储与自动导出VH501TC是一款多功能手持式数据采集仪,专为单弦式振弦传感器设计,同时兼容电压、电流传感器的数据采集。该设备集成了先进的LoRA无线通信技术,可与本公司NLM系列产品无缝对接,实现远程无线…

gitlab+jenkins+harbor+k8s安装操作流程之jenkins gitlab harbor页面配置操作截图

现在文档阶段,实现的操作,开发人员下载或者上传新的代码,提交后jenkins自动构建到jenkinsworkspace目录中,构建过程中,利用build-shell的方式,把workspace中的代码目录制作成镜像,打包,并发送到harbor中,注意:在每个项目目录内,必须有dockerfile文件,才可以发布 1.…

20250227 大作业——HTML6标签设计工作日志

HTML6标签创新设计工作日志 2025.02.27——2025.02.28 高级程序设计课布置了大作业,要求如图 于是去询问 AI ,有哪些方面可以做,决定花一两天时间去了解咨询一下。得到了很多消息,就是现在HTML5所具有的一些功能可以参考这个网站,因为设计者的原因,很多功能可能我们平常不…

效率炸雷!Ethernetip转Profinet网关H+E流量计用EipScan连接预连

本期给大家带来H+E流量计与EipScan模拟软件连通案例。由于很多客户现场任务时间紧任务重的特点,在不确定所购买的稳联技术Profinet转Ethernetip网关(WL-PNS-EIPM)能否与H+E流量计正常通讯的情况下,用EipScan模拟软件先测通。下面就介绍下如何用EipScan模拟软件连通且不通过…