美文网首页
140. 快速幂

140. 快速幂

作者: 6默默Welsh | 来源:发表于2018-02-01 19:28 被阅读9次

描述

计算 a^n % b,其中 a,b 和 n 都是 32 位的整数。

样例

例如 2^31 % 3 = 2
例如 100^1000 % 1000 = 0

挑战

O(logn)

思路

a ^ 2n = (a ^ n) * (a ^ n)
a ^ 2n + 1 = (a ^ n) * (a ^ n) * a
把幂次方拆成一半乘一半

代码

class Solution {
    /*
     * @param a, b, n: 32bit integers
     * @return: An integer
     */
    public int fastPower(int a, int b, int n) {
        if (n == 1) {
            return a % b;
        }
        if (n == 0) {
            return 1 % b;
        }
        
        // 用 long 类型不会有精度损失,结果准确
        long product = fastPower(a, b, n >> 1);
        product = (product * product) % b;
        if ((n & 0x1) == 1) {
            product = (product * a) % b;
        }
        return (int) product;
    }
}

注意

  1. 位运算的左移替代除 2 和与运算替代取余更有效率
  2. 答案是最终版本的优化算法,笨方法是用 for 循环从 1 循环到 n,比较没效率,但无论哪种做法都需要考虑底数为 0 并且幂次方为负的特殊情形。

下面是剑指offer书上的原话


代码

描述

相关文章

  • 140. 快速幂

    描述 计算 a^n % b,其中 a,b 和 n 都是 32 位的整数。 样例 例如 2^31 % 3 = 2例如...

  • lintcode 140. 快速幂

    难度:中等 1. Description 2. Solution 快速幂算法,时间复杂度。 思路: 对于一般的解法...

  • (矩阵)快速幂

    快速乘法: 快速幂: 矩阵快速幂:

  • 快速幂

    常规求幂 快速求幂(一般) 快速求幂 (递归) 快速求幂(位运算) 快速求幂(位运算,更简洁)

  • 快速幂,矩阵快速幂

    快速幂:复杂度为logn,比普通的n快了很多了. 原理 : 实现代码如下:(位运算,简单,简洁) 矩阵快速幂: 所...

  • 模板 | 整数快速幂 & 快速幂取模

    快速幂: 所谓的快速幂,其目的是为了快速求幂,将时间复杂度从朴素算法的降到。 假如现在要求 ,按照朴素算法,就是将...

  • 常用算法

    快速幂 Fast Power 快速取模 FastMode 快速排序 FastSort

  • 2018-07-09-快速幂

    参考:算法学习 - 快速幂和矩阵快速幂(复杂度Olog(n))C++实现 - CSDN博客

  • 快速幂

    对于一个 , 我们可以把它分为 如果化为二进制,则底数为a,指数为0或者1乘以2的次方的权重。我们不妨举例一个例子...

  • 快速幂

    (快速幂)计算A^B的最后x位数 题目描述 请编程计算A^B结果的最后若干位表示的整数. 输入描述 输入数据包含3...

网友评论

      本文标题:140. 快速幂

      本文链接:https://www.haomeiwen.com/subject/sqhjzxtx.html