We first change the intermediate polynomials.
Let  be a power of
 be a power of  , let
, let 
 be a primitive
 be a primitive  -th
root of unity and
-th
root of unity and 
 .
We define
.
We define
| ![\begin{displaymath}\begin{array}{rcl} A^{[0]}(x) & = & a_0 + a_2 x + a_4 x^2 + \...
... + a_3 x + a_5 x^2 + \cdots + a_{n-1} x^{n/2 -1} \\ \end{array}\end{displaymath}](img329.png) | (55) | 
 
such that we have
| ![$\displaystyle A(x) \ = \ A^{[0]}(x^2) + x \, A^{[1]}(x^2).$](img330.png) | (56) | 
 
Hence evaluating  at
 at 
 is reduced to evaluate
is reduced to evaluate ![$ A^{[0]}$](img332.png) and
 and ![$ A^{[1]}$](img333.png) at
 at
 .
But this second sequence of powers of
.
But this second sequence of powers of  consists 
of two identical sequences of length
 consists 
of two identical sequences of length  .
Indeed, for every integer
.
Indeed, for every integer  we have
 we have
|  | (57) | 
 
Since 
 holds, we obtain
 holds, we obtain
|  | (58) | 
 
Hence we only need to evaluate ![$ A^{[0]}$](img332.png) and
 and ![$ A^{[1]}$](img333.png) at
 at
|  | (59) | 
 
This provides us directly with the values of   at
 at
|  | (60) | 
 
and the values of   at
 at
|  | (61) | 
 
by using the fact these numbers are respectively equal to
|  | (62) | 
 
To summarize, for 
 we have
 we have
| ![\begin{displaymath}\begin{array}{rcl} A({\omega}^i) & = & A^{[0]}({\omega}^{2i})...
...ga}^{2i}) - {\omega}^i \, A^{[1]}({\omega}^{2i}) \\ \end{array}\end{displaymath}](img343.png) | (63) | 
 
Algorithm  3   
  
  
![\fbox{
\begin{minipage}{10 cm}
\begin{description}
\item[{\bf Input:}] $n = 2^r$...
...n/2}$\ := $y_k^{[0]} - t$\ \\
\> {\bf return} $y$
\end{tabbing}\end{minipage}}](img344.png) 
 
The validity of Algorithm 3 
follows from the two following observations.
- Formulas (63).
- If  is a primitive is a primitive -root of unity, with -root of unity, with ,
      then ,
      then is a primitive is a primitive -root of unity. -root of unity.
Observe that the recursive calls of defines
an ordering of the coefficients of
 defines
an ordering of the coefficients of  shown
on Figure 2 for
 shown
on Figure 2 for  .
Let us call this ordering the DFT ordering of
.
Let us call this ordering the DFT ordering of  .
.
Observe that if the input array  is sorted w.r.t. this
DFT ordering, one can describe easily the
recursive calls with a binary tree.
If this tree is traversed bottom-up, from left to right,
we are led to an iterative algorithm working in place!
For instance, for
 is sorted w.r.t. this
DFT ordering, one can describe easily the
recursive calls with a binary tree.
If this tree is traversed bottom-up, from left to right,
we are led to an iterative algorithm working in place!
For instance, for  , assuming that the input array
, assuming that the input array  is
 is
We obtain the desired result in  using the following straigth-line program
 using the following straigth-line program
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
 := :=  
Figure 2:
Recursive calls for  .
.
| ![\begin{figure}\htmlimage
\centering
\includegraphics[scale=.5]{fft8.eps}\end{figure}](img372.png) | 
 
Algorithm  4   
  
  
![\fbox{
\begin{minipage}{12 cm}
\begin{description}
\item[{\bf Input:}] $n = 2^r$...
...k + j + m/2]$\ := $u - t$\ \\
\> {\bf return} $A$
\end{tabbing}\end{minipage}}](img373.png) 
 
Remark  8   
To get the DFT ordering for  ,
that is
,
that is 
![$ [a_0, a_4, a_2, a_6, a_1, a_5, a_3, a_7]$](img374.png) ,
observe that this ordering changes
,
observe that this ordering changes
|  | (64) | 
 
to
|  | (65) | 
 
 
Remark  9   
The ring 
 does not have any interesting roots of unity.
In order to take advantage of the FFT-based multiplication
one could use a modular approach as follows.
 does not have any interesting roots of unity.
In order to take advantage of the FFT-based multiplication
one could use a modular approach as follows.
 
Marc Moreno Maza 
2008-01-07