快速幂 快速幂取模 备忘

快速幂:
int qpow(int a, int b)//注意:b>=0 !!! 
{
    
    
	int base=a,r=1;
	while(b)
	{
    
    
		if(b&1)r *= base;
		base *= base;
		b=b>>1;
	}
	return r;
}

base为何可以这样取值,原因如下:
在这里插入图片描述


快速幂取模:
int qpow_mod(int a, int b, int c)//求 a^b mod c 注意 b>=0 c>0 
{
    
    
	int base = a%c,r=1;
	while(b)
	{
    
    
		if(b&1)r= (r*base)%c;
		base = (base*base)%c;
		b=b>>1;
	}
	return r;
}
快速幂递归(此方法来自leetcode50号题官方题解)

在这里插入图片描述

    double helper(double x, long ns){
    
    
        if(ns==0)
            return 1.0;
        if(ns==1)
            return x;
        double t=helper(x,ns>>1);
        if(ns&1) return t*t*x;
        else return t*t;
    }

猜你喜欢

转载自blog.csdn.net/wx_assa/article/details/103001343