Skip to content

Commit c178b3b

Browse files
committed
Fix binary_exponentiation: integer exponent and floor division, add doctests
1 parent e3b01ec commit c178b3b

1 file changed

Lines changed: 12 additions & 2 deletions

File tree

maths/fermat_little_theorem.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,25 @@
55
# Wikipedia reference: https://en.wikipedia.org/wiki/Fermat%27s_little_theorem
66

77

8-
def binary_exponentiation(a: int, n: float, mod: int) -> int:
8+
def binary_exponentiation(a: int, n: int, mod: int) -> int:
9+
"""
10+
Calculate (a ** n) % mod using binary exponentiation, which runs in O(log n) time.
11+
12+
>>> binary_exponentiation(2, 10, 17)
13+
4
14+
>>> binary_exponentiation(3, 0, 5)
15+
1
16+
>>> binary_exponentiation(5, 3, 13)
17+
8
18+
"""
919
if n == 0:
1020
return 1
1121

1222
elif n % 2 == 1:
1323
return (binary_exponentiation(a, n - 1, mod) * a) % mod
1424

1525
else:
16-
b = binary_exponentiation(a, n / 2, mod)
26+
b = binary_exponentiation(a, n // 2, mod)
1727
return (b * b) % mod
1828

1929

0 commit comments

Comments
 (0)