【专题】快速幂

定义:
快速幂顾名思义,就是快速算某个数的多少次幂。
其时间复杂度为 O(log2N), 与朴素的O(N)相比效率有了极大的提高。
以下以求a的b次方来介绍

原理:

把b转换成2进制数
该2进制数第i位的权为(2^(i-1))
例如
a^11=a^(2^0+2^1+2^3)
11的二进制是1 0 1 1
11 = 2^3*1 + 2^2*0 + 2^1*1 + 2^0*1

因此,我们将a^11转化为算a^(2^0)*a^(2^1)*a^(2^3);

代码:

var
	t,y:int64;
begin
	t:=1;y:=a;
	while b<>0 do
	begin
		if (b and 1)=1 then t:=t*y mod n;
		y:=y*y mod n; //这里用了一个很强大的技巧,y*y即求出了 a^(2^(i-1)) ←不知道这是什么的看原理
		b:=b shr 1;
	end;
	exit(t);
end;
begin
	read(a,b,n); // n是模
	write(f(a,b,n));
end.



猜你喜欢

转载自blog.csdn.net/cdy1206473601/article/details/53860126