r = (b^e)%mod
(b, e, mod int64)
| 26 | |
| 27 | // r = (b^e)%mod |
| 28 | func modularExponentiation(b, e, mod int64) int64 { |
| 29 | |
| 30 | //runs in O(log(n)) where n = e |
| 31 | //uses exponentiation by squaring to speed up the process |
| 32 | if mod == 1 { |
| 33 | return 0 |
| 34 | } |
| 35 | var r int64 = 1 |
| 36 | b = b % mod |
| 37 | for e > 0 { |
| 38 | if e&1 == 1 { |
| 39 | r = (r * b) % mod |
| 40 | } |
| 41 | e = e >> 1 |
| 42 | b = (b * b) % mod |
| 43 | } |
| 44 | return r |
| 45 | } |
no outgoing calls