【模板】多项式乘法(NTT)

题目链接:luogu P3803

题目大意

给你两个多项式,要你求它们的卷积。

思路

这次我们写 NTT 的做法。
它的优点就是它可以取模,而且不会有精度问题,而且会比 FFT 稍微快一点?

然而它的确定就是它的模数比较死板,一般就 998244353 , 1004535809 , 469762049 998244353,1004535809,469762049 998244353,1004535809,469762049 这些。(它们的原根都是 3 3 3)

其实就是考虑用原根代替复数。
因为它是跟单位根有着相同的性质。

然后通过证明,我们可以得到 ω n ≡ g p − 1 n m o d p \omega_n\equiv g^{\frac{p-1}{n}}\mod p ωn​≡gnp−1​modp。
然后你就把 FFT 中的 ω i \omega_i ωi​ 都换掉就是 NTT 了。
然后这里我 p p p 取的是 998244353 998244353 998244353,原根是 3 3 3。

代码

#include<cstdio>
#include<algorithm>
#define ll long long
#define mo 998244353
#define G 3using namespace std;int n, m, an[4000001];
int limit, ln;
ll a[4000001], b[4000001], Gv;ll ksm(ll x, ll y) {ll re = 1;while (y) {if (y & 1) re = (re * x) % mo;x = (x * x) % mo;y >>= 1;}return re;
}void NTT(ll *now, int op) {for (int i = 0; i < limit; i++)if (i < an[i]) swap(now[i], now[an[i]]);for (int mid = 1; mid < limit; mid <<= 1) {ll Wn = ksm(op == 1 ? G : Gv, (mo - 1) / (mid << 1));//如果这里是负的那就是逆元的次方for (int R = (mid << 1), j = 0; j < limit; j += R) {ll w = 1;for (int k = 0; k < mid; k++, w = (w * Wn) % mo) {ll x = now[j + k], y = w * now[j + mid + k] % mo;now[j + k] = (x + y) % mo;now[j + mid + k] = (x - y + mo) % mo;}}}
}int main() {scanf("%d %d", &n, &m);for (int i = 0; i <= n; i++) {scanf("%d", &a[i]);a[i] = (a[i] % mo + mo) % mo;}for (int i = 0; i <= m; i++) {scanf("%d", &b[i]);b[i] = (b[i] % mo + mo) % mo;}limit = 1;while (limit <= n + m) {limit <<= 1; ln++;}for (int i = 0; i < limit; i++)an[i] = (an[i >> 1] >> 1) | ((i & 1) << (ln - 1));Gv = ksm(G, mo - 2);NTT(a, 1);NTT(b, 1);for (int i = 0; i < limit; i++)a[i] = (a[i] * b[i]) % mo;NTT(a, -1);ll liv = ksm(limit, mo - 2);//除就变成逆元乘for (int i = 0; i <= n + m; i++)printf("%lld ", a[i] * liv % mo);return 0;
}

【luogu P3803】【模板】多项式乘法(NTT)相关推荐

  1. P4245 【模板】任意模数多项式乘法(NTT)

    题意: P4245 [模板]任意模数多项式乘法 题解: NTT模板,记录一下 代码: #include <bits/stdc++.h>using namespace std;#define ...

  2. 洛谷 - P3803 【模板】多项式乘法(FFT/NTT)

    题目链接:点击查看 题目大意:给出两个多项式 F( x ) 和 G( x ) 的系数,求其卷积后的系数 题目分析:存一个FFT的模板,原理学不明白,数论和dp都扔给队友了,当个快乐的fw 代码: // ...

  3. P3803 【模板】多项式乘法(FFT)

    P3803 [模板]多项式乘法(FFT) 题目描述 给定一个 n 次多项式 F(x),和一个 m 次多项式 G(x). 请求出 F(x)和 G(x)的卷积. 从低到高输出F(x)*G(x)的系数 另一 ...

  4. P4245 【模板】任意模数多项式乘法

    P4245 [模板]任意模数多项式乘法 https://www.luogu.com.cn/blog/AzusaCat/solution-p4245 首先这类问题指的是对于一个非NTT模数,我们如何计算 ...

  5. 解题报告(二)多项式问题(多项式乘法及其各种运算)(ACM/ OI)超高质量题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  6. UOJ #34. 多项式乘法

    #34. 多项式乘法 这是一道模板题. 给你两个多项式,请输出乘起来后的多项式. 输入格式 第一行两个整数 nn 和 mm,分别表示两个多项式的次数. 第二行 n+1n+1 个整数,表示第一个多项式的 ...

  7. P4239 任意模数多项式乘法逆(多项式/ MTT)

    P4239 任意模数多项式乘法逆 这个题目简直就是毒瘤,不过还好我们可以使用vector封装要不然真的没法看,现在我们就会用vector封装MTT了,然后有一个代码细节就是这里的求逆还是在模意义下的, ...

  8. 浅谈算法——多项式乘法相关

    从多项式乘法到FFT 这一段大部分是复制以前我写的这篇博客: https://blog.csdn.net/wang3312362136/article/details/79510933 这篇博客有详细 ...

  9. P5431 【模板】乘法逆元2(小学数学题,毒瘤鱼,卡常之王yyds)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P5431 [模板]乘法逆元2 题目传送门 题目大意: 给定 nnn 个正整数 aia_iai​ ,求 ...

最新文章

  1. js学习总结----crm客户管理系统之项目开发流程和api接口文档
  2. 给自己走过的路留下一些痕迹
  3. java 类的加载、连接和初始化
  4. 基于深度卷积神经网络的目标检测研究综述
  5. java sub,Java 9子软件包跨模块拆分
  6. PHP 加密用户密码 How to store passwords safely with PHP and MySQL
  7. Linux Gedit 报出警告
  8. 32位数据源中没有mysql_基于 SpringBoot 多数据源 动态数据源 主从分离 快速启动器...
  9. 杂谈异常处理try-catch-finally
  10. 2019 The Preliminary Contest for ICPC China Nanchang National Invitational
  11. LongAdder类学习笔记
  12. 细说static关键字及其应用
  13. 《认知盈余》——阅读感受与体会
  14. 阿里云大学双11特惠活动
  15. android3d画廊自动切换,Android ViewPager打造3D画廊
  16. [Python从零到壹] 十六.文本挖掘之词云热点与LDA主题分布分析万字详解
  17. Spark 内存管理之Tungsten
  18. Excel 2013 查找和替换单元格内换行回车
  19. dcs常用的冗余方式_冗余技术在DCS平台应用分析
  20. Android使用WebView播放flash的方法和JavaScript调用本地方法

热门文章

  1. 第II章、如何建立站点?
  2. Java练习题——数字计算
  3. 打开计算机硬盘页面抖动,显示器闪烁抖动的原因分析及解决方法
  4. 开发必备工具,快速生成接口文档、调用示例、mock配置
  5. c语言健康指数,中国汽车健康指数
  6. javascript将网页表格导出Word(转载)
  7. 动手做个聊天室,前端工程师百无聊赖的人生
  8. EPUB格式转PDF在线工具
  9. 云计算实战应用案例精讲-【自动驾驶】多模态融合智能检测方法及 SLAM 车载实现(论文篇)
  10. PDF文件转图片怎么弄?这个方法值得收藏