NTT
1 问题描述
FFT问题解决的是复数域上的卷积。如果现在的问题是这样:给出两个整数数列$Ai,Bj,0\leq i\leq n-1,0\leq j\leq m-1$,以及素数$P$,计算新数列$Ci=(\sum_{k}A_{i-k}B_{k})\%P$。不在$A,B$定义域内的值均为0.NTT就是解决这样在模意义下的卷积问题。
2 预备知识
原根的概念:对于两个正整数$a,m$,如果$Gcd(a,m)=1$,那么存在$d\leq m-1$(比如$\varphi (m)$)使得$a^{d}\%m=1$。如果对于某个g使得在$[1,m-1]$内只有$\varphi (m)$满足$g^{\varphi (m)}\%m=1$,那么g被称作m的原根。比如7的原根是3,因为在1,2,3,4,5,6中只有3^6%7=1。
3 算法描述
NTT的原理与FFT的原理完全相同。即首先我们会将$A,B$通过NTT变换转化成新数列$A^{'},B^{'}$,然后我们有$C_{k}^{'}=A_{k}^{'}B_{k}^{'}$。最后通过NTT逆变换,将$C^{'}$转化成$C$.
FFT变换是这样的:$A_{k}^{'}=\sum_{j=0}^{n-1}A_{j}e^{\frac{2\pi i}{n}kj}=\sum_{j=0}^{n-1}A_{j}w_{n}^{kj}$。
FFT逆变换是这样的:$A_{k}=\frac{1}{n}\sum_{j=0}^{n-1}A_{j}^{'}e^{-\frac{2\pi i}{n}kj}=\frac{1}{n}\sum_{j=0}^{n-1}A_{j}^{'}w_{n}^{-kj}$
$e^{\frac{2\pi i}{n}}$在这里之所以能够使用,是因为它在乘法意义下构成一个群。同理,在模P的系统中,对于乘法来说,$g^{\frac{P-1}{n}}$也构成一个群,类似$(e^{\frac{2\pi i}{n}})^{n}=1$,$(g^{\frac{P-1}{n}})^{n}%P=1$。其中g是P的原根。
因此,NTT变换是: $A_{k}^{'}=\sum_{j=0}^{n-1}A_{j}g^{\frac{P-1}{n}kj}$
NTT逆变换: $A_{k}=\frac{1}{n}\sum_{j=0}^{n-1}A_{j}^{'}g^{-\frac{P-1}{n}kj}=\frac{1}{n}\sum_{j=0}^{n-1}A_{j}^{'}g^{((P-1)-\frac{P-1}{n})kj}$
所以,NTT变换使用的基为$g^{\frac{P-1}{n}}$,NTT逆变换使用的基为$g^{(P-1)-\frac{P-1}{n}}$
这里有一些需要注意的问题。在实际计算时,我们会将整个数列的长度扩展至$2^{K}$次幂,因此在每一次分治时,每个子问题的长度n也都是2的某次幂。而这里,必须要保证n能够整除$P-1$,所以若$P=c*2^t+1$,其中$c$为奇数。那么一定要满足$t\geq K$
NTT的更多相关文章
- Tsinsen A1493 城市规划(DP + CDQ分治 + NTT)
题目 Source http://www.tsinsen.com/A1493 Description 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了. 刚才说过, 阿狸的国家有n个城市, 现在 ...
- HDU5322 Hope(DP + CDQ分治 + NTT)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5322 Description Hope is a good thing, which can ...
- Codeforces632E Thief in a Shop(NTT + 快速幂)
题目 Source http://codeforces.com/contest/632/problem/E Description A thief made his way to a shop. As ...
- hihoCoder1388 Periodic Signal(2016北京网赛F:NTT)
题目 Source http://hihocoder.com/problemset/problem/1388 Description Profess X is an expert in signal ...
- hihocoder #1388 : Periodic Signal NTT&FFT
传送门:hihocoder #1388 : Periodic Signal 先来几个大牛传送门: (模板) NTT long long 版 解法一:因为我们知道FFT会精度不够,所以坚持用NTT,但 ...
- FFT,NTT 专题
学习傅里叶的基本性质及其代码,可以参考大神理解 还有 ACdream 的博客 贴一下NTT的模板: using namespace std; typedef long long ll; int n; ...
- [快速数论变换 NTT]
先粘一个模板.这是求高精度乘法的 #include <bits/stdc++.h> #define maxn 1010 using namespace std; char s[maxn]; ...
- HDU5829 NTT
以下这份代码并没有过.但感觉没有问题.不是蜜汁WA就是蜜汁T. #include <cstdio> #include <iostream> #include <cstri ...
- NTT【51nod】1514 美妙的序列
题意:1~n 的全排列中,有多少个排列满足任意从中间切成两段后,左边段的最大值大于右边段的最小值? 例如:n为3时有3种 2 3 1 3 1 2 3 2 1 解释:比如 2 3 1 (2) (3 1) ...
随机推荐
- sql set xact_abort on 用例
set xact_abort on 设置事务回滚的当为ON时,如果你存储中的某个地方出了问题,整个事务中的语句都会回滚为OFF时,只回滚错误的地方 例子 : ALTER proc [dbo].[BuC ...
- 10个免费的PHP编辑器/开发工具
转自: http://www.iteye.com/news/22672 一个好的编辑器或开发工具,能够极大提高我们的开发效率.下面介绍10个免费.强大的PHP编辑器/开发工具.这些编辑器拥有调试器.增 ...
- 用VS2010编C#程序扫盲 2
0.正则表达式:http://www.runoob.com/csharp/csharp-regular-expressions.html 1.异常处理: try { // 引起异常的语句 } catc ...
- 将服务费用DIY到底----走出软件作坊:三五个人十来条枪 如何成为开发正规军(十)[转]
前一段时间,讲了一系列开发经理.实施经理.服务经理的工具箱:开发经理的工具箱---走出软件作坊:三五个人十来条枪 如何成为开发正规军(三) ,实施经理的工具箱--走出软件作坊:三五个人十来条枪 如何成 ...
- 似是而非的k=sqrt(n)
//题目:输入一个大于3的整数n,判定它是否为素数(prime,又称质数)#include <stdio.h>#include <math.h>int main(){int n ...
- Oracle 11g 在备份导出时缺少表的问题
ORACLE 11G中有个新特性,当表无数据时,不分配segment,以节省空间. 解决方法: 1)insert一行,再rollback就产生segment了 该方法是在在空表中插入数据,再删除,则产 ...
- 161122、BOM 操作写法示例
浏览器相关信息 // 浏览器信息 navigator.userAgent // Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/ ...
- 160912、工具类:spring+springmvc自定义编码转换
一.自定义的类(注意其中的属性,web.xml中的配置就是根据这个类的) import org.springframework.web.filter.OncePerRequestFilter; imp ...
- JProfiler入门笔记
看链接:http://blog.csdn.net/chendc201/article/details/22897999 收集一下.
- iOS录音加播放.
现在发现的事实有: 如果没有蓝牙设备, 那么可以用下面的方法边录音, 边放音乐: 在录音按钮按下的时候: _avSession = [AVAudioSession sharedInstance]; ...