### devarshi09's blog

By devarshi09, history, 5 years ago,

How to calculate (a power b) mod p correctly if b is exceeding long long integer limit in c++.

• +1

| Write comment?
 » 5 years ago, # |   0 O(log2(b))?
•  » » 5 years ago, # ^ |   0 yup!
 » 5 years ago, # |   +29 Let b = b1b2.....bn(concatenated) By induction, Let x = a ^ (b1b2...bk) (mod p)a ^ (b1b2....b(k+1)) = ( a^(b1b2....bk) ) ^ 10 * (a ^ b(k+1)) = x^10 * a^b(k+1)now you can calculate modulo without overflow
•  » » 5 years ago, # ^ |   0 got it! Thanks
 » 5 years ago, # |   0 first i need to store b. But b is exceeding the integer limit! How can i store b so that i correctly calculate (a power b) mod p. p is prime.
•  » » 5 years ago, # ^ | ← Rev. 2 →   +8 If b is in the form of a string, then we can calculate with the following code: ll B = 0; for (char c: b) { B = (10*B+(c-'0'))%(p-1); } Now assuming that a is nonzero.EDIT: This is exactly what DongwonShin wrote above. If b is being calculated via a DP table, then you can just take all values mod p - 1 and there won't be overflow.
•  » » » 5 years ago, # ^ |   0 got it. thanks!
•  » » » 5 years ago, # ^ |   0 but why p-1?
•  » » » » 5 years ago, # ^ |   0 Fermat's theorem tells us that if (a, p) = 1. So we can take the power by the modulo.
•  » » » » » 5 years ago, # ^ |   0 Thanks man!
•  » » » » » » 5 years ago, # ^ |   +2 In general if you have two co prime integers m and n, then m^p modulo n = m^(p%f(n)) modulo n, where f(n) is Euler totient function This.For any prime n, f(n)=n-1.So, the Fermat's theorem follows from this.
•  » » » » » » » 5 years ago, # ^ |   0 I am using precomputed factorial and inverse factorial array to calculate b so should i use n-1 as the mod there also?
•  » » » 5 years ago, # ^ |   0 What if b is being calculated through nCr using precomputed factorial and inverse modulo arrays?Then also we've to use same mod p-1 ?
•  » » » » 5 years ago, # ^ |   0 As long as your base(b) and p are co prime, I don't see why it can't be done. So, yes use same mod (p-1).
•  » » » » » 5 years ago, # ^ | ← Rev. 3 →   0 I tried but then for example 11*(inv[11)) didn't turn out to be 1 when i used p-1 as mod but while using p as mod it did show 1. here inv[11] = power(11,mod-2,mod) where power is fast exponential function.
•  » » » 5 years ago, # ^ | ← Rev. 2 →   0 What if b is calculated as a-c and c requires division operation?Then while using inverse modulo for division i should use which mod?I am confused.Please help.
 » 5 years ago, # |   0