原文:https://blog.csdn.net/herano/article/details/71213373
-1、为什么学 FFT
退役(很早)之前听说 FFT 很神(e)奇(xin),Po姐来讲的时候也是膜(sha)了(ye)一(bu)发(dong),于是就放那里了。退役之后有(xian)了(de)时(mei)间(shi),并且在篮球赛之前立了赢一场的 flag 否则学FFT结果又双叒叕全输了,于是下面就是成果了……网上 FFT 讲解多得是不看也罢……
从一个简单问题说起:大整数乘法。在做 VijosP2000 的时候,看数据范围 O(n2)O(n2) 的 FFT 了。
FFT(Fast Fourier Transform),全名快速傅里叶变换,这与傅里叶变换只有半毛钱的关系,傅里叶变换是分析波的成分的方法,通过推广傅里叶变换得到了优化的快速傅里叶变换,为了展示区别和联系,下面是傅里叶变换和傅里叶逆变换的公式:
傅里叶变换:
我们把形如 a0+a1x+a2x2+⋯+an−1xn−1a0+a1x+a2x2+⋯+an−1xn−1 等类似形式表示。
我们知道,向量是个好东西(蛤?),矩阵也是个好东西(蛤?),于是我们把三者结合起来看(蛤玩意?)。
我们将 n−1n−1
我们把多项式 A(x)A(x) 的点值表示。
到这里,是不是差不多忘了要干什么了……
这个比较简单,拿题说。这是我还没出也不想出的一道题,拿出来娱乐一下……
题目描述 Description
都知道 FZ 酱数学不好,数学老师很着急,于是让她求个多项式的值。但是数学老师一不小心数据就出大了,他却并没有注意到这一点。老师共出了 TT 道题就崩溃了,请帮她尽快完成作业。
输入 Input
第一行一个整数 TT。
输出 Output
对于每组数据,输出一行,为答案。
样例输入 Sample Input
2
2
3 2
100
3
1 2 3
-9
样例输出 Sample Output
203
226
样例解释 Explanation
对于第一个多项式为 A(x)=2x+3A(x)=2x+3。
限制 Limits
对于 50%50% 位。
那么很好我们必须写高精度了……
2128−1≈3.4×10382128−1≈3.4×1038。
暴力不会吗?
核心代码如下:
这里挨个乘太慢了,快速幂处理会快一些。
(其实不一定会快多少)
核心代码如下:
学过必修三吗?
学过必修三还不会?
拿出数学必修三翻到 37 页你看到了什么?
秦九韶算法可以大量减少乘法和加法次数,并且把运算量简化为 O(n)O(n) 的。
核心代码如下:
不过没上面的优雅不是吗……(呵呵)
回到正题上,我们要谈的其实是……
没啥难度,直接加即可:
这就是个开括号的问题……
两个次数界为 na,nbna,nb 就可以知道了。