乘法快速幂

如果需要求x^n,那么最简单的办法就是对x进行n次相乘,此时时间复杂度为O(n),而乘法快速幂可以是O(logn)的复杂度

举例

假设需要求10^75,首先对75转为二进制,为

image-20251206205347014

对于该例子,x=10,设置每次x = x*x

设置一个ans变量,每次有有选择地乘以x,具体选择方式如下:

x=10^1,发现1对应的二进制那一位为1,则ans = 1*x= 1*10^1

image-20251206205906304

然后x=x*x,即x=10^2,发现对应的二进制那一位为1,则ans = 1*10^1*10^2

image-20251206210010562

然后x=x*x,即x=10^4,发现对应的二进制那一位为0,则ans = 1*10^1*10^2,ans不变

image-20251206210051706

以此类推,总结下来就是先把n变成二进制,然后x每次都与自己相乘,遇到二进制对应的位为1就乘进ans里面,否则ans不动

对应的java代码如下:

 public static long power(long x, long n,long mod) {
        long res = 1;
        while (n > 0) {
            if ((n & 1)!= 0)
                res = (res * x) % mod;
            n = n >> 1;
            x = (x * x) % mod;
        }
        return res;
    }
最后修改:2025 年 12 月 06 日
如果觉得我的文章对你有用,请随意赞赏