一般地,一元n次多项式的求值需要经过(n+1)*n/2次乘法和n次加法,而秦九韶算法只需要n次乘法和n次加法。在人工计算时,一次大大简化了运算过程。
该算法看似简单,其最大的意义在于将求n次多项式的值转化为求n个一次多项式的值。在人工计算时,利用秦九韶算法和其中的系数表可以大幅简化运算;对于计算机程序算法而言,加法比乘法的计算效率要高很多,因此该算法仍有极大的意义,对于计算机来说,做一次乘法运算所用的时间比作一次加法运算要长得多,所以此算法极大地缩短了CPU运算时间。
样例:
把一个n次多项式
改写成如下形式:
求多项式的值时,首先计算最内层括号内一次多项式的值,即
然后由内向外逐层计算一次多项式的值,即
这样,求n次多项式f(x)的值就转化为求n个一次多项式的值。
结论:对于一个n次多项式,至多做n次乘法和n次加法。
代码如下:
- long long modexp(long long a, long long b, int mod)
- {
- long long res=1;
- while(b>0)
- {
- //a=a%mod;(有时候n的值太大了会超出long long的储存,所以要先取余)
- if(b&1)//&位运算:判断二进制最后一位是0还是1,&的运算规则为前后都是1的时候才是1;
- res=res*a%mod;
- b=b>>1;//相当于除以2;
- a=a*a%mod;
- }
- return res;
- }