1. 程式人生 > >快速冪初步學習

快速冪初步學習

去掉 進制 二進制 末尾 刪掉 nbsp light log mil

快速冪顧名思義就是快速求冪,也常用於求冪的模(余數)

例如求Xq,常規算法是乘qX,時間復雜度為O(n),而快速冪復雜度為O(log2n),我們看下如何實現

n用二進制可寫成2k1+2K2+...2kn

Xn=X2^k1+2^k2+...+2^kn=X2^k1·X2^k2·...·X2^kn

從二進制n的末尾開始,累乘x,即通項為X2^kn ,若n的該位為1累乘通項,從右往左刪掉n的每一位直到n為0

int fun(int x,int n){
	int ans=1,base=x;
	while(n!=0){
		if(n&1)		//若二進制數最後一位為1返回1 
			ans*=base;
		base*=base; 
		n>>=1;		//去掉二進制數n最後一位
	}
	return ans;
}

  

快速冪初步學習