[模板] 快速幂和龟速乘

快速幂

用于较快计算幂

ull quick_power(ull a,ull b,ull k){
    ull ans = 1,base = a % k;
    if(b==0 && k==1) return 0;//特判,除0以外任何数的0次方都是1,1模1得0
    do{
        if(b & 1){
            ans = (ans * base) % k;
        }
    base = (base * base) % k;
    b>>=1;
    }while(b);
    return ans;
}

龟速乘

用于乘法防爆

LL qmul(LL x, LL y, LL MOD){
	LL ans = 0;

	for(	; y; y >>= 1){
		if(y&1 == 1){
			(ans += x) %= MOD;
		}
		(x += x) %= MOD;
	}

	return ans;
}	

两者可以结合使用

猜你喜欢

转载自www.cnblogs.com/Foggy-Forest/p/13373747.html