ACM必备算法:快速幂(Java)

Posted ZSYL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACM必备算法:快速幂(Java)相关的知识,希望对你有一定的参考价值。

Java- 快速幂

前提

指数运算,Java提供的有函数,而且初学Java 循环时 必须了解,幂运算,但是当 底数 指数很大时,我们就需要快速幂,提高计算效率,ACM竞赛必备的基本算法,因为它对JAVA 不是很友好,因此我们尽量需要提高代码效率。

引入

3 ^ 5 = 3 * 3 * 3 * 3 * 3 我们可以,让指数变小,底数增大。 3 ^ 5 = 9 * 9 * 3 = 81 * 3
发现指数从 5 – 2 – 1,逐步缩小。

代码

 public static long quickPow(long a, long b) {
        long res = 1;
        while (b != 0) {
            // 判断指数是否为奇数
            if ((b & 1) == 1) {
                // 奇数的话,结果*底数
                res *= a;
            }
            // 将结果 * 底数的平方
            res *= (a * a);
            // 指数缩小一半
            b >>= 1;
        }
        return res;
    }

努力奋斗

加油!

以上是关于ACM必备算法:快速幂(Java)的主要内容,如果未能解决你的问题,请参考以下文章

ACM | 算法 | 快速幂

ACM入门之矩阵快速幂

快速乘法/快速幂 算法

整数快速乘法/快速幂+矩阵快速幂+Strassen算法 (转)

2017 ECJTU ACM程序设计竞赛 矩阵快速幂+二分

ACM必备的快速输入输出(Java)