本博文源于《程序设计竞赛入门》,今天头铁拿着厚厚的一本《流畅的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
(A∗A∗...∗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))