/* 快速傅里叶变换实用程序 */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.1415926
typedef struct complexnumber
{
double rpart;
double ipart;
}cnumber;
void quickfft(cnumber p[],int n,int k,cnumber f[],int l,int il)
{
int it,m,is,i,j,nv,l0;
double t,q,s,vr,vi,r;
cnumber podd;
for (it=0; it<n; it++){
m=it; is=0;
for (i=0; i<k; i++){
j=m/2;
is=2*is+(m-2*j);
m=j;
}
f[it].rpart=p[is].rpart;
f[it].ipart=p[is].ipart;
}
p[0].rpart=1.0;
p[0].ipart=0.0;
t=2*PI/(1.0*n);
p[1].rpart=cos(t);
p[1].ipart=-sin(t);
if (l!=0) p[1].ipart=-p[1].ipart;
for (i=2; i<n; i++) {
t=p[i-1].rpart*p[1].rpart;
q=p[i-1].ipart*p[1].ipart;
s=(p[i-1].rpart+p[i-1].ipart)*(p[1].rpart+p[1].ipart);
p[i].rpart=t-q; p[i].ipart=s-t-q;
}
for (it=0; it<n-1; it+=2){
vr=f[it].rpart;
vi=f[it].ipart;
f[it].rpart&