Problem link: Another Bigmod Problem
In this problem, we are given three integers A, B, C; we need to calculate AB % C.
Solution: We can calculate it by using modular arithmetic. We know
This algorithm is called classical bigmod algorithm. But in this problem, we still have problem. Look at line 9 : x = ( x * x ) % c;
Here, since c can be as large as 10^18, the value of x can be (10^18 - 1 ). When we multiply x with x, it will overflow. For example, try with input a = 10^18 - 1, b = 2, c = 10^18.
So how do we calculate ( x * x ) % c, without overflowing? We use the same divide and conquer approach like above. But this time we will use addition instead of multiplication. It's called bigmultiplication, we will write the function as following:
So finally our full code would look like this:
In this problem, we are given three integers A, B, C; we need to calculate AB % C.
Solution: We can calculate it by using modular arithmetic. We know
- (a * b) % c = ( (a % c) * (b % c) ) %c
- (a + b) % c = ( (a % c) + (b % c) ) %c
- a^b = a * a^(b-1)
This algorithm is called classical bigmod algorithm. But in this problem, we still have problem. Look at line 9 : x = ( x * x ) % c;
Here, since c can be as large as 10^18, the value of x can be (10^18 - 1 ). When we multiply x with x, it will overflow. For example, try with input a = 10^18 - 1, b = 2, c = 10^18.
So how do we calculate ( x * x ) % c, without overflowing? We use the same divide and conquer approach like above. But this time we will use addition instead of multiplication. It's called bigmultiplication, we will write the function as following:
So finally our full code would look like this:
No comments:
Post a Comment