笔试——快速幂取模

在这里插入图片描述

阿里巴巴2021暑期实习笔试题,题目本身需要经过数学推导,得到答案的表达式为 ( n × 2 n 1 ) % ( 1 0 9 + 7 ) (n\times 2^{n-1}) \% (10^9+7) ,其中 n n 是输入的一个大数, % \% 是取模运算。

本题需要使用快速幂取模算法,在python中有自带的实现:

pow(a,b,c)  # 等价于(a^b)%c,但在b非常大时效率高很多

使用其他语言需要自己实现,可以参考下面的资料与代码:

[1] 快速幂取模快速算法超级详细介绍

def quick_pow_mod(a, b, c):
    A = 1  # 一个递推数列
    T = a % c  # 一个辅助的递推数列
    while b != 0:  # 用b每次除以2直到为0
        # 递推An,如果当前b的二进制最低位不是1则不用计算,因为An=An-1
        if b & 1:
            A = (A * T) % c
        # 递推Tn
        T = (T * T) % c
        b >>= 1
    return A
发布了67 篇原创文章 · 获赞 27 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/xpy870663266/article/details/105325500