快速幂算法 Quickmod(C语言)

快速幂的算法

快速幂算法一般用于指数比较大的幂运算,例如3的100次方,2的50次方等等,相比于使用pow(a,b)函数来说,快速幂运行所需时间更小,在一些有时间限制的题目上有着非常大的优势

算法原理:

例如我要算3的100次方,我们可以不停的3x3x3x3……x3一直乘到第100-1个3,这样算起来虽然比较直观易懂,但是如果放到代码上去运行步骤会非常的重复繁琐,而且运行的时间比较长

快速幂原理是将3的100拆分为3的50次方和3的50次方相乘,而3的50次方又可以拆分为3的25次方与3的25次方相乘
在这里插入图片描述
只要指数为偶数的都可以对半拆分

如果遇到指数为奇数的情况(如上图的3的25次方),我们可以先拿出一个数来,让指数变为偶数,然后再让剩下的指数对半拆分例如上图的3的25次方,我们可以把它拆为
在这里插入图片描述
剩下的过程以此类推:
在这里插入图片描述
一般来说指数不是偶数就是奇数

如果是奇数就把它转化为偶数
如果是偶数就把它对半拆分

整个算法的原理可以举一个通俗的例子来解释

如果我们要复制一个句子:My name is Mr VK

我们要把它复制100句,如果我们一个一个去复制粘贴的话我们需要复制100次,这很不方便,其实我们可以先复制10句,再将这10句话复制10次就可以达到100句,快速幂的原理就是这个道理

代码实现:

#include<stdio.h>
int main()
{
	int a,b;
	scanf("%d %d",&a,&b);
	long long int r=1;//因为幂运算的结果可能是一个很大的数值所以用long long整型来储存
	while(b!=0)
	{
		if(b%2==0)//b如果是偶数的情况 
		{
			b=b/2;
			a=a*a;
		}
		else//b如果是奇数的情况 
		{
			b=b-1;
			r=r*a;
		}
	}
	printf("%lld\n",r);
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值