初学快速幂详细讲解

不扯那么多,我就直接讲解快速幂是怎么样求解计算的;

首先你要知道快速幂是把指数b转换为二进制进行权值进位来计算a的b次方的;例如2的11次方;11的二进制位1011,就是8+0+2+1;a的8次方乘a的2次方再乘a的1次方;每次都把a的权值进一位也就是这样的最开始a在1位为a,第一次是a进一位为a的2次方,第二次就是a的4次方。。。依次类推。

再给大家讲几个小知识有助于理解下面的代码:

&  与运算 法则 0&0=0;0&1=0;1&0=0;1&1=1 ;
b&1:如果b是个奇数b&1等于1,如果是个偶数b&1为0;

下面就是模板代码给的有注释

/*********
*如果求a的b次方对某个数取余,数据太大的话,
*可以先对a求余,每次计算sum 都对sum进行求余 
* 公式的引理,即积的取余等于取余的积的取余。
**********/ 


#include <stdio.h>

void Pow(int a, int b)
{
	long long Sum;
	int Base;
	Sum = 1;
	Base = a;
	while(b)
	{
		if(b&1)
			Sum *= Base;
			
		Base *= Base;//每次位权值进一位;
		b>>=1; //b向右移一位(也就是b/=2); 
	}
		printf("%lld\n", Sum); 
}
int main()
{
	int a, b;
	long long Sum;
	while(~scanf("%d %d", &a, &b))
	{
		Pow(a,b);
	}
	return 0; 
}
 如果有可以改进的地方,可以在评论给我留言,共同学习,谢谢! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值