python求解幂次取余问题(含测试效果)

本博文源于《程序设计竞赛入门》,今天头铁拿着厚厚的一本《流畅的python》去看,被里面内容,陷入深深的自我怀疑。怀疑自己有永远学不完的知识。痛苦了一会儿,还是用python去解决幂次取余的问题。幂次取余如果单纯来解应该不是什么问题,关键是需要用快捷方法。

一、题目再现

Problem Description
给定三个正整数A,B和C,求 A B % C A^B\%C AB%C的结果,其中%表示求余数。
Input
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据.每组测试数据输入三个正整数A,B,C(A,B,C ≤ 100 \le{100} 100).
Output
对于每组测试,输出计算后的结果,每组测试的输出占一行.

Input
2
3 3 5
4 4 6

Output
2
4

二、解题关键

利用同余性质
( A ∗ A ∗ . . . ∗ A ) % C = ( A ∗ . . . ∗ ( A ∗ ( A % C ) % C ) % C . . . ) % C (A*A*...*A)\%C=(A*...*(A*(A\%C)\%C)\%C...)\%C (AA...A)%C=(A...(A(A%C)%C)%C...)%C

三、解题源码

def f(m, n, k):
    if n == 0:
        return 1
    else:
        t = f(m, n // 2, k) % k 
        if n % 2 == 0:
            return t * t % k
        else:
            return t * t * m % k

if __name__ == '__main__':
    T = int(input())
    for t in range(T):
        a,b,c = map(int,input().split())
        print(f(a,b,c))

四、测试效果

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值