摘要
本文讲解了快速幂算法的定义、复杂度证明及两种实现(递归与非递归),以及它的两个重要拓展:快速幂模M算法和矩阵快速幂。其中矩阵快速幂算法是矩阵求幂问题对整数求幂问题的借鉴,实际应用中对于线性递推式求解能起到强大的效率优化。
快速幂算法
问题引入:求 an(a,n∈N+)
朴素算法:令ans初始值为1,乘n次a得到 an
朴素算法时间复杂度:O(n)
问题:如果n非常大,比如高达 1015 ,怎么办?
思考:朴素算法哪里可以优化?
朴素算法的特点是,连乘过程中底数始终为 a ,这很不聪明。考虑下例:
我们没有必要乘15次2,注意到 15=23+22+21+20 ,不妨将 215 拆分为 223×222×221×2