快速幂深入了解,以及加法,减法,乘法取余的证明

本文深入探讨了快速幂算法的原理与应用,并通过递归和递推两种方式进行了详细说明。此外,还介绍了加法、减法和乘法取余的数学证明。

题外话:昨天看李煜东老师写的算法竞赛进阶指南中说探究一门学问有三个层次:求其解,知其原因,究其思维之本。通俗地讲,就是”怎么做“,”为什么是对的“,”怎么做才能想到这么去做“。

------------------------------------------------------------------------------------------------------------------------------------

快速幂的深入了解:如果要用最直接的方法去求x^n,那么我们就需要进行n-1次乘法运算,算法复杂度为O(n)。但是x的幂乘可以用x^n=(x^2)^(n/2),可以通过下面的递归函数实现:

x^n=1(n=0)

x^n=(x^2)^(n/2) n为偶数

x^n=(x^2)^(n/2)*x n为奇数

int pow(int x,int n)
{
    if(n==0)return 1;
    res=pow(x*x,n/2);
    if(n%2){
        res=res*x;
    }
    return res;
}

最后快速幂是怎么回事呢?快速幂不就是这个递归变成了递推么,可以将n变为二进制看看,然后根据大多数网上那种拆进制的讲解,传送门

------------------------------------------------------------------------------------------------------------------------------------

接着看加法取余的证明:

(a+b)%m=(a%m+b%m)%m

证明:设a=a1*m+ar,b=b1*m+br,然后a+b=a1*m+b1*m+ar+br,接着(a+b)%m=(a1*m+b1*m+ar+br)%m=(ar+br)%m=(a%m+b%m)%m

减法取余的证明:
(a-b)%m = (a%m-b%m+m)%m

证明:设a=a1*m+ar,b=b1*m+br,然后a-b=a1*m-b1*m+ar-br,因为害怕ar-br可能是负数,所以可以将前面a1*m-b1*m借一个m出来,变为a-b=a1*m-b1*m+ar-br=(a1-b1-1)*m+(ar-br+m),接着(a-b)%m=((a1-b1-1)*m+(ar-br+m))%m=(ar-br+m)%m=(a%m-b%m+m)%m

乘法取余的证明:

证明:设a=a1*m+ar,b=b1*m+br,然后a*b=a1*b1*m^2+a1*br*m+b1*ar*m+ar*br=(a1*b1*m+a1*br+b1*ar)*m+ar*br,接着(a*b)%m=((a1*b1*m+a1*br+b1*ar)*m+ar*br)%m=(ar*br)%m=(a%m*b%m)%m

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值