zoukankan      html  css  js  c++  java
  • 快速幂

    为什么要用快速幂

    因为当指数很大的时候,暴力的求幂函数的方式导致复杂度非常高。因此要采用降低复杂度的方式,如何减少复杂度,就是减少累乘的次数,这种称作快速幂。复杂度都是log2N。

    思想

    1. 二分法思想用递归 比如2的10次方拆成两个2的5次方相乘 2的5次方再拆成2*2的4次方,2的四次方再拆成2的2次方 一直到指数为0。
    2. 用迭代 将指数拆成进制数再计算。在这里插入图片描述
    
    typedef long long LL;
    //递归写法
    LL binarypow1(LL a, LL b, LL m)
    {
    	if (b == 0)
    		return 1;
    	if (b % 2 == 1)
    		return a * binarypow1(a, b - 1, m) % m;
    	else
    	{
    		LL mul = binarypow1(a, b / 2, m);
    		return mul * mul % m;
    	}
    }
    
    //迭代写法
    LL binarypow2(LL a, LL b, LL m)
    {
    	LL ans = 1;
    	while (b > 0)
    	{
    		if (b & 1)
    		{
    			ans = ans * a % m;
    		}
    		a = a * a % m;
    		b >>=1;
    	}
    	return ans;
    }
    
    
    
    
    
  • 相关阅读:
    四则运算
    四则运算二
    学习进度条
    四则运算一
    课堂测试七
    问题与思考6
    问题与思考5
    问题与思考04
    Android SDK 目录说明
    如何判断视频的比例(4:3/16:9)和分辨率?
  • 原文地址:https://www.cnblogs.com/Hsiung123/p/13812064.html
Copyright © 2011-2022 走看看