La transformée de Fourier rapide : fft

### 6.25.3 La transformée de Fourier rapide : `fft`

`fft` a comme argument une liste (ou une séquence) `[a``0``,..a``N-1``]` où `N` est une puissance de deux.
`fft` renvoie la liste `[b``0``,..b``N-1``]` tel que pour `k=0..N-1` on ait :
`` `fft([a``0``,..a``N-1``])``[k]=b``k``=∑``j=0``N-1``x``j``ω``N``-k· j` avec ωN racine N-ième de l’unité.
On tape :

`fft(0,1,1,0)`

On obtient :

`[2.0, -1-i, 0.0, -1+i]`

On peut aussi travailler sur un corps fini ℤ/pℤ, en indiquant une racine N-ième primitive de l’unité en 2ième argument et p en 3ième argument de `fft`. Par exemple on verifie que 22798 est une racine primitive d’ordre 128 de 1 modulo 35969. Par exemple, calculons par FFT le carré d’un polynôme à coefficients entiers aléatoire inférieur à 10, de degré 60, représenté par la liste de ses coefficients par ordre croissant complété par des 0 pour avoir une liste de taille N=128 :

`P:=poly1[op(ranm(1,60,10)[0]),0$68];
p:=fft(P,22798,35969)`

il suffit maintenant de calculer le produit terme à terme de `p` avec lui-même et d’en calculer la FFT inverse

`Q:=ifft(p .* p,22798,35969)`