M的N次方 快速幂算法

现有3的7次方,7=1+2+4,则7的二进制位0111,7右移一位是相当于除以2,依次右移相当于除以4,8,也就是说3的2次方,3的4次方,等等。如果幂为奇数,则每次多乘一次底数。

 

public class PowMofN {

    public static void main(String[] args) {

        System.out.println(pow(3,7));

    }

    public static long pow(int M , int N) {

        if(M == 0) {
            return 0;
        }else if(N==0) {
            return 1;
        }

        int base = M;
        int p = N >> 1;

        while(p != 0) {

            base *=base;
            if( (p&N)==p) base *=M;
            p = p>>1;
        }

        return base;
    }
}

 

### Python 中实现矩阵快速幂并取模 为了高效地计算大型矩阵的高次幂,可以采用矩阵快速幂算法。该方法利用二分的思想,在对数时间内完成指数运算,并结合取模操作防止数值溢出。 #### 矩阵快速幂原理 矩阵快速幂的核心在于将普通的线性时间复杂度优化到对数级别的时间复杂度 O(log n),这使得处理大规模数据成为可能。具体来说,当需要计算 \( A^n \mod m \) 时: - 如果 n 是偶数,则先计算 \( (A^{n/2})^2 \mod m \) - 如果 n 是奇数,则分解成 \( ((A^{(n-1)/2})^2 * A) \mod m \) 这种方法不仅提高了效率,还减少了中间结果可能出现的大数问题。 #### 使用 NumPy 库简化矩阵运算 NumPy 提供了高效的数组和矩阵操作接口,能够显著提升性能。下面是一个完整的 Python 函数定义,实现了上述逻辑[^3]。 ```python import numpy as np def matrix_power_mod(matrix, power, mod): """ 计算给定矩阵matrix的power次方后取模mod的结果 参数: matrix: 输入的基础方阵 power : 幂次 mod : 取模基数 返回值: 结果矩阵 """ result = np.eye(len(matrix), dtype=int) % mod # 初始化单位矩阵作为初始结果 base_matrix = matrix.copy() # 复制输入矩阵以防修改原对象 while power > 0: if power & 1: # 当前位为1则相乘 result = (result @ base_matrix) % mod base_matrix = (base_matrix @ base_matrix) % mod # 更新底数 power >>= 1 # 移除最低有效位 return result ``` 此函数接受三个参数:待求幂的 `matrix`、所需的 `power` 和最终要取模使用的 `mod` 值。通过循环迭代的方式逐步构建最终的结果矩阵。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值