快速幂

作者: BUG_7621f | 来源:发表于2019-12-13 22:17 被阅读0次

今天的内容是Fast Power快速幂,是编程中求幂的得力能手,一定要背下来哦。
注意:本篇对三目运算符做了一定的介绍。如果已对三目运算符有了解,可跳过“如何使用三目运算符”
讲解之前,别忘了收藏我的编程专题哦

做法

在求x^p时,若p为偶数,运算(x^{p/2})^2,否则运算(x^{p/2})^2*x。注意运算p/2是不四舍五入的整除。

证明

这个证明没有什么难的.
假设p是奇数,p整除2=k,那么p=k+k+1是显而易见的。

image
例如:
偶数情况只是少了这个多余的而已,可自行证明一下。

区别

时间复杂度从O(n)变为O(log n)。假设我们已经有了an,且我们要求a^n
普通幂是这样实现的:

int ans=a;
int pow(int a,int n){
    for(int i=1;i<n;i++){
        ans*=a;
    }
}

此方法运行了n次。
快速幂的写法是递归:

int pow(int a,int n){
    if(p==0)return;
    int t=pow(a,n/2);
    if(n%2==0){
        return t*t;
    }
    else{
        return t*t*a;
    }
}

如何使用三目运算符

实际上上面的代码就是正确的代码,但希望通过这篇博客,大家能认识一个新东西:三目运算符。
C++ 中惟一的三目运算符是这样写的:

(expression) ? (do something) : (do something else)

它相当于:

if(expression)
    do something;
else
    do something else;

那么为什么使用此运算符呢?因为它短小精悍。当然,如果if后面有多句话,就不提倡这么做了。

  • 经典的用三目运算符的例子:
int compare_which_bigger(int a,int b){
    a>b ? return a : return b;
}
  • 经典的反面例子:
int compare_which_biggest(int a,int b,int c,int d,int e){
    a>b||a>c||a>d||a>e ? return a : (b>c||b>d||b>e||b>a ? return b : (c>a||c>b||c>d||c>e ?return c : (d>a||d>b||d>c||d>e ? return d : return e)));
}

快速幂最终代码

int pow(int a,int n){
    if(p==0)return;
    int t=pow(a,n/2);
    n%2==0 ? return t*t : return t*t*a;
}

相关文章

  • (矩阵)快速幂

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

  • 快速幂

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

  • 快速幂,矩阵快速幂

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

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

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

  • 常用算法

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

  • 2018-07-09-快速幂

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

  • 快速幂

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

  • 快速幂

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

  • 快速幂

    今天的内容是快速幂,是编程中求幂的得力能手,一定要背下来哦。注意:本篇对三目运算符做了一定的介绍。如果已对三目运算...

  • 快速幂

    快速幂用于快速求解a的b次方。将b分解为若干个指数不重复的2的次幂的和,c为0或1。其中时间复杂度

网友评论

      本文标题:快速幂

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