幂运算

1、整数的快速幂

a^b%m当b还不是很大的时候

(a%m)……%m

int mod(int a,int b,int m){
    int ans=1,i;
    for(i=1;i<=b;i++){
        ans=ans*a%m;
    }
    return ans;
}

但是a,b太大可能存不下,所以这里介绍一种利用二分的思想

2、把指数b表示成相应的二进制形式

是0的位不给予考虑,

long long mod(long long a,long long b,long long m){
	long long ans=1;
	while(b){
		if(b&1){
			ans=(ans*a)%m;
			b--;
		}
		b/=2;
		a=a*a%m;
	}
	
	return ans;
}

 另外一种是递归的方法

long long mod(long long a,long long b,long long m){
	if(b==1)
		return a%m;
	if(b%2)
		return  mod(a*a%m,b/2,m)*a%m;
	else
		return mod(a*a%m,b/2,m)%m;
}
原文地址:https://www.cnblogs.com/wintersong/p/4392593.html