diff --git a/math/modular_inverse_fermat_little_theorem.cpp b/math/modular_inverse_fermat_little_theorem.cpp
index 965c21298..7550e14bf 100644
--- a/math/modular_inverse_fermat_little_theorem.cpp
+++ b/math/modular_inverse_fermat_little_theorem.cpp
@@ -1,44 +1,59 @@
-/*
- * C++ Program to find the modular inverse using Fermat's Little Theorem.
- * Fermat's Little Theorem state that => ϕ(m) = m-1, where m is a prime number.
- *
- * (a * x) ≡ 1 mod m.
- * x ≡ (a^(-1)) mod m.
+/**
+ * @file
+ * @brief C++ Program to find the modular inverse using [Fermat's Little
+ * Theorem](https://en.wikipedia.org/wiki/Fermat%27s_little_theorem)
*
+ * Fermat's Little Theorem state that \f[ϕ(m) = m-1\f]
+ * where \f$m\f$ is a prime number.
+ * \f{eqnarray*}{
+ * a \cdot x &≡& 1 \;\text{mod}\; m\\
+ * x &≡& a^{-1} \;\text{mod}\; m
+ * \f}
* Using Euler's theorem we can modify the equation.
+ *\f[
+ * a^{ϕ(m)} ≡ 1 \;\text{mod}\; m
+ * \f]
+ * (Where '^' denotes the exponent operator)
*
- * (a^ϕ(m)) ≡ 1 mod m (Where '^' denotes the exponent operator)
- * Here 'ϕ' is Euler's Totient Function. For modular inverse existence 'a' and 'm' must be relatively primes numbers.
- * To apply Fermat's Little Theorem is necessary that 'm' must be a prime number.
- * Generally in many competitive programming competitions 'm' is either 1000000007 (1e9+7) or 998244353.
+ * Here 'ϕ' is Euler's Totient Function. For modular inverse existence 'a' and
+ * 'm' must be relatively primes numbers. To apply Fermat's Little Theorem is
+ * necessary that 'm' must be a prime number. Generally in many competitive
+ * programming competitions 'm' is either 1000000007 (1e9+7) or 998244353.
*
* We considered m as large prime (1e9+7).
- * (a^ϕ(m)) ≡ 1 mod m (Using Euler's Theorem)
- * ϕ(m) = m-1 using Fermat's Little Theorem.
- * (a^(m-1)) ≡ 1 mod m
- * Now multiplying both side by (a^(-1)).
- * (a^(m-1)) * (a^(-1)) ≡ (a^(-1)) mod m
- * (a^(m-2)) ≡ (a^(-1)) mod m
+ * \f$a^{ϕ(m)} ≡ 1 \;\text{mod}\; m\f$ (Using Euler's Theorem)
+ * \f$ϕ(m) = m-1\f$ using Fermat's Little Theorem.
+ * \f$a^{m-1} ≡ 1 \;\text{mod}\; m\f$
+ * Now multiplying both side by \f$a^{-1}\f$.
+ * \f{eqnarray*}{
+ * a^{m-1} \cdot a^{-1} &≡& a^{-1} \;\text{mod}\; m\\
+ * a^{m-2} &≡& a^{-1} \;\text{mod}\; m
+ * \f}
*
- * We will find the exponent using binary exponentiation. Such that the algorithm works in O(log(m)) time.
+ * We will find the exponent using binary exponentiation. Such that the
+ * algorithm works in \f$O(\log m)\f$ time.
*
- * Example: -
- * a = 3 and m = 7
- * (a^(-1) mod m) is equivalent to (a^(m-2) mod m)
- * (3^(5) mod 7) = (243 mod 7) = 5
- * Hence, ( 3^(-1) mod 7 ) = 5
- * or ( 3 * 5 ) mod 7 = 1 mod 7 (as a*(a^(-1)) = 1)
+ * Examples: -
+ * * a = 3 and m = 7
+ * * \f$a^{-1} \;\text{mod}\; m\f$ is equivalent to
+ * \f$a^{m-2} \;\text{mod}\; m\f$
+ * * \f$3^5 \;\text{mod}\; 7 = 243 \;\text{mod}\; 7 = 5\f$
+ *
Hence, \f$3^{-1} \;\text{mod}\; 7 = 5\f$
+ * or \f$3 \times 5 \;\text{mod}\; 7 = 1 \;\text{mod}\; 7\f$
+ * (as \f$a\times a^{-1} = 1\f$)
*/
-#include
-#include
+#include
+#include
-// Recursive function to calculate exponent in O(log(n)) using binary exponent.
+/** Recursive function to calculate exponent in \f$O(\log n)\f$ using binary
+ * exponent.
+ */
int64_t binExpo(int64_t a, int64_t b, int64_t m) {
a %= m;
int64_t res = 1;
while (b > 0) {
- if (b%2) {
+ if (b % 2) {
res = res * a % m;
}
a = a * a % m;
@@ -48,13 +63,14 @@ int64_t binExpo(int64_t a, int64_t b, int64_t m) {
return res;
}
-// Prime check in O(sqrt(m)) time.
+/** Prime check in \f$O(\sqrt{m})\f$ time.
+ */
bool isPrime(int64_t m) {
if (m <= 1) {
return false;
} else {
- for (int i=2; i*i <= m; i++) {
- if (m%i == 0) {
+ for (int64_t i = 2; i * i <= m; i++) {
+ if (m % i == 0) {
return false;
}
}
@@ -62,6 +78,9 @@ bool isPrime(int64_t m) {
return true;
}
+/**
+ * Main function
+ */
int main() {
int64_t a, m;
// Take input of a and m.
@@ -71,7 +90,7 @@ int main() {
std::cin >> a >> m;
if (isPrime(m)) {
std::cout << "The modular inverse of a with mod m is (a^(m-2)) : ";
- std::cout << binExpo(a, m-2, m) << std::endl;
+ std::cout << binExpo(a, m - 2, m) << std::endl;
} else {
std::cout << "m must be a prime number.";
std::cout << std::endl;