Skip to content

Commit 94b12a2

Browse files
committed
Fixed bug in multiply_strings.cpp - added explanation for fast exponentiation
1 parent be90705 commit 94b12a2

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

Math/Fast Exponentiation with Mod/fast_exponentiation_mod.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,16 @@ ll mult(ll a, ll b, ll m){
88
return ((a%m)*(b%m))%m;
99
}
1010

11+
/* Principle
12+
b^e = b^(e/2) * b^(e/2) if e is even
13+
= b^(e-1) * b if is e is odd
14+
Base cases:
15+
b^0 = 1
16+
b^1 = b
17+
18+
Note the property: (a*b)%m = ((a%m)*(b%m)) %m
19+
*/
20+
1121
ll fast_exp_mod(ll b, ll e, ll m){
1222
if(e == 0) return 1;
1323
if(e == 1) return b%m;
@@ -19,7 +29,7 @@ ll fast_exp_mod(ll b, ll e, ll m){
1929
}
2030

2131
int main(){
22-
ll b, e, m;
32+
ll b, e, m;//We are calculating b^e % m
2333
scanf("%lld%lld%lld", &b, &e, &m);
2434
printf("%lld\n", fast_exp_mod(b, e, m));
2535
return 0;

Math/Multiplication/C++/multiply_strings.cpp renamed to Math/Multiplication/multiply_strings.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
using namespace std;
77

8-
string plus(string &a, string &b) {
8+
string _plus(string &a, string &b) {
99
int size_a = a.size();
1010
int size_b = b.size();
1111
int size = max(size_a, size_b) + 1;
@@ -78,7 +78,7 @@ string multiply(string num1, string num2) {
7878
int size1 = num1.size();
7979
for(int i = size1 - 1; i >= 0; --i) {
8080
string p = _multiply(num2, num1[i] - '0') + tmp;
81-
result = plus(result, p);
81+
result = _plus(result, p);
8282
// cout << result << endl;
8383
tmp += '0';
8484
}

0 commit comments

Comments
 (0)