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

https://www.luogu.com.cn/blog/AzusaCat/solution-p4245
首先这类问题指的是对于一个非NTT模数,我们如何计算多项式乘法,对于NTT不容易找到单位根,对于FFT又会爆精度。

方法1:三模数NTT
寻找三个大模数最后CRT合并即可

方法2:MTT
将系数拆分为两部分,分别是M的倍数和余数,然后我们只需要对其分别处理即可,但是这样暴力的做一共需要7次FFT复杂度太高,我们通过一些数学技巧可以优化到4次。

首先DFT时可以发现虚部是空的,我们可以将另一个多项式放在虚部,然后利用共轭求解共轭的值,然后就可以一次求出两个多项式的点值,所以可以将4次DFT变为2次。

然后IDFT时,发现点值最后转化为系数时虚部也是空的,所以我们可以将两个多项式加在一起IDFT,可以发现如果给系数乘i,那么点值对应乘i,所以对应的虚部点值不会影响到实部的系数。

代码细节:

  1. 取整问题
    floor是向下取整
    ceil是向上取整
    强制转换是向0取整
    所以我们要四舍五入需要判断正负,对于负数-0.5后取整,对于正数+0.5后取整。
  2. 这里需要维护的complex操作太多了,自己写结构体太麻烦了,还是直接用complex库里封装好的类型吧。
  3. 我晕了啊,竟然是一开始读入时候M设置为根号n了,天哪,怪不得会爆掉
  4. 还有一个小细节,就是原来fft里可以不用设置为-sin,直接最后或者一开始的时候reverse就好了,因为这样也相当于将其设置为-k
  5. 记得一旦有乘法就要检查是否会爆int,有些时候我们不得不先除后乘,否则就会爆掉。

P4245 【模板】任意模数多项式乘法相关推荐

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

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

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

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

  3. P4245-[模板]任意模数多项式乘法

    正题 题目链接:https://www.luogu.com.cn/problem/P4245 题目大意 两个多项式,求它们的乘积模ppp. 解题思路 方法好像挺多,我用的是最简单的一种就是,先定一个常 ...

  4. 洛谷.4245.[模板]任意模数NTT(MTT/三模数NTT)

    题目链接 三模数\(NTT\): 就是多模数\(NTT\)最后\(CRT\)一下...下面两篇讲的都挺明白的. https://blog.csdn.net/kscla/article/details/ ...

  5. 洛谷 P4245 【模板】任意模数NTT

    洛谷 P4245 [模板]任意模数NTT 贴个板子,4次DFT. Code #include<cstdio> #include<algorithm> #include<c ...

  6. 任意模数ntt_【知识总结】多项式全家桶(三)(任意模数NTT)

    经过两个月的咕咕,"多项式全家桶" 系列终于迎来了第三期--(雾) 先膜拜(伏地膜)大恐龙的博客:任意模数 NTT (在页面右侧面板 "您想嘴谁" 中选择 &q ...

  7. 【知识总结】多项式全家桶(三)(任意模数NTT)

    经过两个月的咕咕,"多项式全家桶" 系列终于迎来了第三期--(雾) 上一篇:[知识总结]多项式全家桶(二)(ln和exp) 先膜拜(伏地膜)大恐龙的博客:任意模数 NTT (在页面 ...

  8. 【luogu P3803】【模板】多项式乘法(NTT)

    [模板]多项式乘法(NTT) 题目链接:luogu P3803 题目大意 给你两个多项式,要你求它们的卷积. 思路 这次我们写 NTT 的做法. 它的优点就是它可以取模,而且不会有精度问题,而且会比 ...

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

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

最新文章

  1. TF之LSTM:利用LSTM算法对mnist手写数字图片数据集(TF函数自带)训练、评估(偶尔100%准确度,交叉熵验证)
  2. ASP.NET Core中的分布式缓存
  3. jzoj4226-A【图论】
  4. POJ3628:Bookshelf 2【01背包】
  5. HTTP协议和HTTPS协议
  6. Ural 1043 Cover the Arc
  7. 计算机硬盘怎么设置ntfs,如何把计算机硬盘文件系统fat32改为ntfs.doc
  8. idea配置Idea类注释模板和方法注释模板(亲测有效)
  9. 使用pm2部署vue项目
  10. 如何寻找“真爱”型合伙人
  11. Google谷歌的未来 野心:2017 Google I/O 大会 全程回顾
  12. android7.1刷supersu,Android怎么刷SuperSU 安卓系统刷SuperSU Pro教程
  13. 【愚公系列】2022年11月 uniapp专题-优购电商-商品列表
  14. 热修复原理学习(1)热修复技术介绍
  15. 智安网络丨第一次听人把云计算讲这么明白!
  16. echarts绘制3D旋转地球
  17. P3939 数颜色 (权值线段树)
  18. 概率中的独立与相关:相互独立、条件独立、协方差、相关系数
  19. Python的列表操作
  20. check的3种用法

热门文章

  1. 安卓效率微商_微商人脉通app下载-微商人脉通 安卓版v2.5.5-PC6安卓网
  2. 世界上最诡异的画,到底为何让无数人闻风丧胆?
  3. 刚刚!华为mate30 pro全球首发,三星黯然失色,iPhone11甚至都被吓降价了
  4. TED演讲:区块链将如何改变世界?看完太震撼了!
  5. 计算机管理用户和组无法访问,同一工作组无法访问如何解决【详解】
  6. python获取div标签的id_Python 获取div标签中的文字实例
  7. php中unset面试题,php unset和引用——由一道php面试题引发的思考
  8. lua传值到php,使用lua实现php的var_dump()函数功能
  9. php 初始二维数组长度,php二维数组排序与默认自然排序的方法介绍
  10. 索尼android 怎么截屏快捷键,索尼XZ Premium怎么截屏 2种索尼XZ Premium截图方法