3100 mod 15 如何快速计算

先将十进制的100转换为二进制

参考:二进制与十进制互相转换https://www.yuofyou.cn/20200906/1244.html

100(10)=1100100(2)

1100100
1次方2次方4次方8次方16次方32次方64次方

现在要来计算3n mod 15

n取2的倍数 并且把它们全部计算出来

n取1: 表格中直接写3,这作为基础

1100100
1次方2次方4次方8次方16次方32次方64次方
3

n取2:因为对应的二进制是1 所以这里直接把上一个数平方,再乘以基础3
(31)2 mod 15 = 9 mod 15 = 9 把上一个数平方
9×3 mod 15 = 27 mod 15 =12 再乘以基础3
表格中写12

1100100
1次方2次方4次方8次方16次方32次方64次方
312

n取4:因为对应的二进制是0 所以这里直接把上一个数平方

122 mod 15 = 9

直接写9

1100100
1次方2次方4次方8次方16次方32次方64次方
3129

n取8:因为对应的二进制是0 所以这里直接把上一个数平方

92 mod 15 = 6
表格写6

1100100
1次方2次方4次方8次方16次方32次方64次方
31296

n取16:因为对应的二进制是1 所以这里直接把上一个数平方,再乘以基础3

62 mod 15 = 6
6 × 3 mod 15 = 3
表格写3

1100100
1次方2次方4次方8次方16次方32次方64次方
312963

n取32:因为对应的二进制是0 所以这里直接把上一个数平方

3 × 3 mod 15 = 9
表格写9

1100100
1次方2次方4次方8次方16次方32次方64次方
3129639

n取64:因为对应的二进制是0 所以这里直接把上一个数平方

9 × 9 mod 15 = 81 mod 15 = 6

表格写6

1100100
1次方2次方4次方8次方16次方32次方64次方
31296396

到这里表格已经被我们完成了,而这道题的最终答案也就是表格中最后填写的这个数6

3100 mod 15 = 6

python代码

def int_to_bin(num):
    return list(bin(num))[2:]

"""
Modular exponentiation
returns a ^ b mod n
"""
def exp(a, b, n):
    c = 0
    f = 1 
    bin_b = int_to_bin(b) # 转换二进制
    k = len(bin_b) #取二进制长度看看循环多少次
    for i in range(k):   # Fill this part.
        c = 2*c 
        f =  f*f % n
        if bin_b[i] == '1': 
            c = c+1
            f = f*a % n
           
    return f
最后修改:2022 年 05 月 08 日
如果觉得我的文章对你有用,请随意赞赏