from cmath import pi, exp
def FFT(A, w):
"""
快速傅氏变换 要求将多项式的系数表示长度为2的次方
:param A:多项式
:param w:单位的n次方本原单位根
:return:
"""
length = len(A)
if length == 1:
return [A[0]]
else:
A_even = [] # 偶数位置的系数 含0
A_odd = [] # 奇数位置的系数
for i in range(0, length // 2):
A_even.append(A[2*i])
A_odd.append(A[2*i+1])
# 分治 递归计算偶数和奇数的点值表示
F_even = FFT(A_even, w**2)
F_odd = FFT(A_odd, w**2)
x = 1
values = [None] * length # A的点值初始化
for i in range(0, length//2):
values[i] = F_even[i] + x*F_odd[i]
values[i+length//2] = F_even[i] - x*F_odd[i]
x *= w
return values
def solver(A, B):
"""
找到单位的n=1次方根,总共有n+1个
分治快速计算A(x) B(x) 这些单位的根
将A(x)B(x)的点值相乘,得到C(x)的点值表示
将C(x)的点子表示
分治算法--多项式
最新推荐文章于 2024-01-21 00:25:30 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)