C快速幂
Posted decimus
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C快速幂相关的知识,希望对你有一定的参考价值。
快速幂代码如下:
int me(int a,int b)//传入a的b次方
int ans=1;
while(b!=0)
if(b&1==1)
ans*=a;
a*=a;
b=b>>1;
return ans;
以3的11次方为例。
则a=3,b=11
将11用二进制表示,11(2)=1011,可以将11拆解为20+21+23
3的11次方可以表示为3^(20+21+23)
3的三次方拆解为3^(20)·3^(21)·3^(23)
用位运算&1得出3末尾的二进制数,>>=1右移一位,逐个取得3的每一位二进制数进行计算。
a*a的意义:31→32→34→38→316→332→...
以上是关于C快速幂的主要内容,如果未能解决你的问题,请参考以下文章
Prime Number(CodeForces-359C)[快速幂/思维]