Gauss's complex multiplication algorithm
wiki link for gauss multipilication
multi(x,y)
if |x| = |y| =1, then returen xy
break X into a,b and Y into c,d
e=multi(a,c) and f=multi(b,d)
return e* 10n +(multi(a+b,c+d)-e-f)10n/2+f
O(nlog23) < O(n2)
stack of frames list as below:
X=2133 | X=2133 | x=2133 | x=2133 | x=2133 |
Y=2312 | Y=2312 | y=2312 | y=2312 | y=2312 |
ac= | ac= | ac= | ac= | ac=483 |
bd= | bd= | bd= | bd= | bd= |
(a+b)(c+d)= | (a+b)(c+d) | (a+b)(c+d)= | (a+b)(c+d)= | (a+b)(c+d)= |
XY= | XY | xy= | xy= | xy= |
x=21 | X=21 | x=21 | x=21 | x=33 |
y=23 | Y=23 | y=23 | y=23 | y=12 |
ac= | ac=4 | ac=4 | ac=4 | ac=3 |
bd= | bd= | bd=3 | bd=3 | bd=6 |
(a+b)(c+d)= | (a+b)(c+d)= | (a+b)(c+d)= | (a+b)(c+d)=15 | (a+b)(c+d)=18 |
XY= | XY= | XY= | xy=483(4*102+(15-4-3)*10+3) | xy=396 |
x=2 | x=1 | x=3 | AND SO ON... | |
y=2 | y=3 | y=5 | ||
xy=4 | xy=3 | xy=15 | ||