Hello Codeforces How to calculate pow(a,nCr) % p efficiently? Here 1 <= n <= 10^6, 1 <= r <= 10^6 and 1<= a <= 10^6
| # | User | Rating |
|---|---|---|
| 1 | Benq | 3676 |
| 2 | Kevin114514 | 3659 |
| 3 | jiangly | 3640 |
| 4 | turmax | 3450 |
| 5 | tourist | 3382 |
| 6 | strapple | 3360 |
| 7 | Um_nik | 3354 |
| 8 | squareOf105 | 3348 |
| 9 | heuristica | 3322 |
| 10 | maroonrk | 3312 |
| # | User | Contrib. |
|---|---|---|
| 1 | Qingyu | 158 |
| 2 | nik_exists | 151 |
| 3 | maspy | 149 |
| 4 | AmShZ | 144 |
| 5 | Um_nik | 143 |
| 6 | Errichto | 139 |
| 7 | adamant | 137 |
| 8 | BledDest | 133 |
| 9 | maroonrk | 132 |
| 10 | Proof_by_QED | 131 |
Hello Codeforces How to calculate pow(a,nCr) % p efficiently? Here 1 <= n <= 10^6, 1 <= r <= 10^6 and 1<= a <= 10^6
| Name |
|---|



Sorry, i got it wrong
Hint: Use Legendre's formula and Fermat's little Theorem.
To find a^b %m when b is too large, we calculate a^(b%(m-1))%m this can be proceed using fermat little theorem.
To calculate nCr%(m-1) you can use chinese remainder theorem if m-1 is non prime and square free.
I prove a^b %m= a^(b%(m-1))%m in this way, but I am not sure whether it is correct or not.
Fermat's little theorem tells that a^(m-1) %m=1, and thus we can write b=x*(m-1)+y. Then, a^b %m=a^(x*(m-1)+y) %m= a^y * (a^(m-1))^x %m= (a^y %m) * (a^(m-1) %m)^x=a^y %m =a ^ (b%(m-1)) %m.
If this is correct, I really have never considered using Fermat's little theorem in this manner... My first reaction is to calculate the inverse of b when we need to compute a/b %m. Thank you so much for sharing such wonderful idea and extending my thought.
Can you elaborate more on how you calculte nCr%(m — 1) using chinese remainder theoreom ? Suppose that (m — 1) is non-prime.