summaryrefslogtreecommitdiff
path: root/math/modExp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'math/modExp.cpp')
-rw-r--r--math/modExp.cpp16
1 files changed, 4 insertions, 12 deletions
diff --git a/math/modExp.cpp b/math/modExp.cpp
index 967068c..d74eca0 100644
--- a/math/modExp.cpp
+++ b/math/modExp.cpp
@@ -1,15 +1,7 @@
// Laufzeit: O(log(b))
-ll multMod(ll a, ll b, ll n) {
- if(a == 0 || b == 0) return 0;
- if(b == 1) return a % n;
- if(b % 2 == 1) return (a + multMod(a, b-1, n)) % n;
- else return multMod((a + a) % n, b / 2, n);
-}
-
-// Laufzeit: O(log(b))
ll powMod(ll a, ll b, ll n) {
- if(b == 0) return 1;
- if(b == 1) return a % n;
- if(b % 2 == 1) return multMod(powMod(a, b-1, n), a, n);
- else return powMod(multMod(a, a, n), b / 2, n);
+ if(b == 0) return 1;
+ if(b == 1) return a % n;
+ if(b & 1) return (powMod(a, b - 1, n) * a) % n;
+ else return powMod((a * a) % n, b / 2, n);
}