快速幂(240819)

原理:\(3^ {10_{(10)}}=3^{1010_{(2)}}\)

\(3^{10}=3*3*3*3*3*3*3*3*3*3=3^2*3^8\)

1010第一位为0,ans不操作,num*=num(num:0001->0010)

1010第二位为1,ans=ans*num=\(3^2\),num *=num(ans:0010,num:0010->0100)

1010第三位为0,num*=num=(num:0100->1000)

1010第四位为1,ans*=sum=\(3^2 * 3^8\)(ans:1010,sum:1000)

ll po(ll x,ll y){
	ll ans=1;
	while(y){//还有指数没清 
		if(y%2==1){//此位为1 
			ans=(ans*x)%m;
		} 
		x=(x*x)%m;//下一位 
		y/=2;//分解 
	}
	return ans%m;
}
posted @ 2024-08-22 18:37  MistyPost  阅读(29)  评论(0)    收藏  举报