算法
设两个复数
A
=
a
+
i
b
,
B
=
c
+
i
d
A=a+ib,B=c+id
A=a+ib,B=c+id,普通的算法,两个复数相乘需要四次乘法:
A
B
=
(
a
c
−
b
d
)
+
(
a
d
+
b
c
)
i
AB=(ac-bd)+(ad+bc)i
AB=(ac−bd)+(ad+bc)i
但是我们三次乘法就可以实现。那么按以下算法计算:
m
1
=
(
a
+
b
)
(
c
−
d
)
m
2
=
b
c
m
3
=
a
d
A
B
=
(
m
1
−
m
2
+
m
3
)
+
(
m
2
+
m
3
)
i
m_1=(a+b)(c-d)\\ m_2=bc\\ m_3=ad\\ AB=(m_1-m_2+m_3)+(m_2+m_3)i
m1=(a+b)(c−d)m2=bcm3=adAB=(m1−m2+m3)+(m2+m3)i
乘法的次数是减少了,但是加法的次数增加了不少,哈哈。
Python实现
def mul(x, y):
a = x.real
b = x.imag
c = y.real
d = y.imag
m1 = (a + b) * (c - d)
m2 = b * c
m3 = a * d
return complex(m1 - m2 + m3, m2 + m3)
if __name__ == '__main__':
print(mul(1 + 3j, 2 + 5j))