Python学习笔记04----计算(a^n) % b并输出结果

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-29 20:09   86   0

题目:

给你两个正整数a(0 < a < 100000)和n(0 <= n <=100000000000),计算(a^n) % b并输出结果

解析:
此题的要点在于数字a的n次方接近于无限大,导致如果直接先计算a的n次方的数值会导致结果过大而无法继续取余的运算,再次分析题意并且寻找规律,首先我们假定a=2 b=36 则依次取n(0-20)值得到以下结果:
[1, 2, 4, 8, 16, 32, 28, 20, 4, 8, 16, 32, 28, 20, 4, 8, 16, 32, 28, 20]

可以发现,[4,8,16,32,28,20]是无限重复的数列,不难得出,当n取无限大的时候,总能在结果数列中找到一个无线循环的子序列,因此得到结题思路,代码如下

#d为题中除数
def countResult(a,n,d):
    #余数集合
    remainArr=[]
    #乘积
    sum=1
    while remainArr.count(sum%d)==0:
        remainArr.append(sum%d)
        sum=sum*a
    #重复位置
    repeatIndex=remainArr.index(sum%d)
    #推理n处的余数
    if(n>=len(remainArr)) :
        index=repeatIndex+(n-repeatIndex)%(len(remainArr)-repeatIndex)
    else :
        index=n
    #返回结果
    return remainArr[index]

print(countResult(2,8,36))

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP