快速幂&快速乘法
Posted wxyww
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速幂&快速乘法相关的知识,希望对你有一定的参考价值。
尽管快速幂与快速乘法好像扯不上什么关系,但是东西不是很多,就一起整理到这里吧
快速幂思想就是将ax看作x个a相乘,用now记录当前答案,然后将指数每次除以2,然后将当前答案平方,如果x的2进制最后一位为1的话,就将答案乘以现在的数。快速乘法类似,只是将a*x看作x个a相加。
代码
1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 int mi(int a,int x) 5 { 6 int ans=1; 7 for(int now=a;x>=1;x>>=1,now=now*now)//a表示底数,x表示次数 8 { 9 if(x&1) ans=ans*now; 10 } 11 return ans; 12 } 13 int cheng(int a,int x)//表示a*x 14 { int ans=0; 15 for(int now=a;x>=1;now=now*2,x>>=1) 16 { 17 if(x&1) ans=ans+now; 18 } 19 return ans; 20 } 21 int main() 22 { 23 int a,x; 24 scanf("%d%d",&a,&x); 25 printf("快速幂 %d ",mi(a,x)); 26 printf("快速乘法 %d ",cheng(a,x)); 27 return 0; 28 }
以上是关于快速幂&快速乘法的主要内容,如果未能解决你的问题,请参考以下文章
ZOJ - 3216:Compositions (DP&矩阵乘法&快速幂)