1056解题报告

来源:互联网 发布:信鸽软件怎么样 编辑:程序博客网 时间:2024/06/07 14:57

快速幂模板
__int64 powhaha(__int64 n,__int64 m)
{
     __int64 ans=1;
     while(m>0)
     {
          if(m&1)
          {
                   ans*=n;
          }
          n*=n;
          m>>1;
     }
     return ans;
}
原理:n n ···n(m个n相乘)
设最后乘积为ans,初始值1;
(ans=1)*n*n*···*n(m个n)

                     <------<---------------<---------------------| 
if(m为偶数),那么可以化为                                  |
(ans=1)*(n*n)*(n*n)*···*(n*n)(m/2个(n*n))        |
 if(m为奇数,把一个n放入ans中)                          |
(ans=n)*n*n*···*n(m-1个n)                                    |     循环,每次新的n等于原来的n*n,新的m=原来的m/2;
这是m-1为偶数,那么等式就可以简化为              |
(ans=n)*(n*n)*(n*n)*···*(n*n)((m-1)/2个(n*n))   | 
                                                                              |
                      --------------------->------------------------|



此模板用于求n的m次方



0 0
原创粉丝点击