快速幂模板

 

一般地,一元n次多项式的求值需要经过(n+1)*n/2次乘法和n次加法,而秦九韶算法只需要n次乘法和n次加法。在人工计算时,一次大大简化了运算过程。

该算法看似简单,其最大的意义在于将求n次多项式的值转化为求n个一次多项式的值。在人工计算时,利用秦九韶算法和其中的系数表可以大幅简化运算;对于计算机程序算法而言,加法乘法的计算效率要高很多,因此该算法仍有极大的意义,对于计算机来说,做一次乘法运算所用的时间比作一次加法运算要长得多,所以此算法极大地缩短了CPU运算时间。

样例:

把一个n次多项式

改写成如下形式:

多项式的值时,首先计算最内层括号内一次多项式的值,即

然后由内向外逐层计算一次多项式的值,即

这样,求n次多项式f(x)的值就转化为求n个一次多项式的值。

结论:对于一个n次多项式,至多做n次乘法和n次加法。

代码如下:

 

  1. long long modexp(long long a, long long b, int mod)  
  2. {  
  3.     long long res=1;  
  4.     while(b>0)  
  5.     {  
  6.         //a=a%mod;(有时候n的值太大了会超出long long的储存,所以要先取余)  
  7.         if(b&1)//&位运算:判断二进制最后一位是0还是1,&的运算规则为前后都是1的时候才是1;  
  8.             res=res*a%mod;  
  9.         b=b>>1;//相当于除以2;  
  10.         a=a*a%mod;  
  11.     }  
  12.     return res;  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值