快速幂算法和大整数求模

快速幂算法提供了一种高效的计算大整数次方的方法,将时间复杂度降至O(logn),通过二进制分解和平方运算实现。同时介绍了大整数求模的性质,利用模运算的线性性质简化计算,例如(a ^ b) % p = ((a % p)^b) % p。结合这些理论,可以解决如546471837123713的6464713次方对764求模这类问题。
摘要由CSDN通过智能技术生成
                      ** 1.快速幂的算法**

(1)当我们求一个数的n次方的的结果时,若直接选择for循环,来累乘的话,效率很低,时间复杂度位O(n),而当我们选择快速幂来计 算时,时间复杂度能达到O(logn),快了很多。快速幂的基本方法基于二进制,将n次方分解,每次计算平方。如下:
假设我们要求5^23(5的23次方),因为23换为二进制为:10111。即2^4*1+2^3*0+2^2*1+2^1*1+2^0*1,那么5^23次方就可以转换,为:5^(2^4*1)*5^(2^3*0)*5^(2^2*1)*5^(2^1*1)*5^(2^0*1)。基于这个公式,我们计算5^23次方就只需要5步就算出来了,原来则需要计算23次。效率提高不少,特别是当n为很大的时候,效率更高。那么,现在有个问题,怎么算这五步呢?思路如下:

1.观察这五个等式,从高到低依次为5^16,5^8(虽然没有,但规律是这样),5^4,5^2,5^1[前一项是后一项的平方]
2.我们可以通过&1来得到一个数的最后一位,可以通过>>符号将二进制往右边移一位。
有了上面两点,我们来实现快速幂的算法:

         long quick(long a,long n){
                            long base=a; 
                            long res=1;
                            while(n!=0){   //判断次方n的二进制是否已经移动完了
                                if((n&1</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值