系数表示法:储存一个多项式的系数。
点表示法:n-1阶多项式,储存不同阶的值。
算法一:将一个多项式的系数表示法转换成点表示法(复数)。
这个算法是一个很难理解的算法,这里姑且不去理解它的细节,只去利用它的结果。下面是C代码:
===============c2p.h========================
/*
*将一个多项式的系数表示法转换成点表示法。
*/
#include<math.h>
#include"complex.h"
#include<malloc.h>
int c2p( complex *a, int n, complex *y){//a表示多项式的系数,y表示计算出来的点值,n表示系数的个数。
//判断n是否是2的整数幂,若不是退出程序。
int k = log(n-0.0001)/log(2) + 1;//使得2^(k-1)<n<=2^k
int i, nn = 1;
for(i = 0; i < k; i++){
nn = nn << 1;
}
if( nn != n ){
printf("n should be 2^k./n");
return 0;
}
k = c2p0(a, n, y);
return k;
}
int c2p0(complex *a, int n, complex *y){
int i, j, k;
complex xn, x, t;
complex *a0, *a1, *y0, *y1;
if(n == 1){
y[0].rmz = a[0].rmz;
y[0].imz = a[0].imz;
return 1;
}
k = n >> 1;
a0 = malloc(k*sizeof(complex));
a1 = malloc(k*sizeof(complex));
y0 = malloc(k*sizeof(complex));
y1 = malloc(k*sizeof(complex));
if( (a0==NULL) || (a1==NULL) || (y0==NULL) || (y1==NULL) ){
printf("(c2p0)memory alloc failed./n");