快速幂算法

快速幂,是为了解决形如\(n^m\)的结果的算法
暴力求它求要\(m\)次运算
但运用快速幂就可以简化为接近\(log(m)\)的时间复杂度
一般来说快速幂会在取模的意义下进行运算
所以pow就会受限,我们需要快速幂来救
(下面的代码就不带取模了啊~)
快速幂有两种求法,方法相近
分别是\(while\)和递归的做法:
\(while\)写法:

int ksm(int x,int y){
	int tot=0,tmp=x;
	while(y){
		if(y%2==1)tot*=tmp;
		tmp*=tmp;
		y/=2;
	}
	return tot;
}

递归写法:

int ksm(int x,int y){
	if(y==1) return x;
	int tmp=ksm(x,y/2);
	tmp*=tmp;
	if(y&1) tmp*=x;
	return tmp;
}

这是一种算法,在很多数论题中会用到
可以说,这是数论题的代码实现的重要基础
所以说,\(why\) \(not\)记住它?

posted @ 2020-08-04 20:05  Realityang  阅读(152)  评论(0编辑  收藏  举报