From c178b3b7869472984bca606a0bf17178cf2780f6 Mon Sep 17 00:00:00 2001 From: ArefinAlter Date: Tue, 30 Jun 2026 05:54:58 +0600 Subject: [PATCH] Fix binary_exponentiation: integer exponent and floor division, add doctests --- maths/fermat_little_theorem.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/maths/fermat_little_theorem.py b/maths/fermat_little_theorem.py index 4a3ecd05ce91..3c783b1452d2 100644 --- a/maths/fermat_little_theorem.py +++ b/maths/fermat_little_theorem.py @@ -5,7 +5,17 @@ # Wikipedia reference: https://en.wikipedia.org/wiki/Fermat%27s_little_theorem -def binary_exponentiation(a: int, n: float, mod: int) -> int: +def binary_exponentiation(a: int, n: int, mod: int) -> int: + """ + Calculate (a ** n) % mod using binary exponentiation, which runs in O(log n) time. + + >>> binary_exponentiation(2, 10, 17) + 4 + >>> binary_exponentiation(3, 0, 5) + 1 + >>> binary_exponentiation(5, 3, 13) + 8 + """ if n == 0: return 1 @@ -13,7 +23,7 @@ def binary_exponentiation(a: int, n: float, mod: int) -> int: return (binary_exponentiation(a, n - 1, mod) * a) % mod else: - b = binary_exponentiation(a, n / 2, mod) + b = binary_exponentiation(a, n // 2, mod) return (b * b) % mod