快速幂运算

转载自(https://www.cnblogs.com/lca1826/p/6748372.html)

由于是二进制,很自然地想到用位运算这个强大的工具: & 和 >> ,&运算通常用于二进制取位操作,例如一个数 & 1 的结果就是取二进制的最末位。还可以判断奇偶x&10为偶,x&11为奇。>>运算比较单纯,二进制去掉最后一位

其中要理解base=base这一步,看:::basebase==base2,下一步再乘,就是base2*base2==base4,然后同理 base^4 * base4 = base^8 ,,,,, see?是不是做到了base-->base2-->base4-->base8-->base16-->base^32.......指数正是 2^i 啊,再看上面的例子,a¹¹ = a(20) * a(21) * a(23),这三项是不是完美解决了,,嗯,快速幂就是这样。

自己敲了一遍

#include <iostream>
using namespace std;
long long qpow(int a,int b)
{
	long long ans=1,base=a;
	while(b!=0)
	{
		if(b&1!=0)
		ans*=base;
		base*=base;
		b>>=1;
	}
	return ans;
}
main()
{
	int n,t;
	while(cin>>n>>t)
	cout<<qpow(n,t)<<endl;
} 
原文地址:https://www.cnblogs.com/baccano-acmer/p/9780825.html