Hi Everyone.
Now I'm wondering about how to count (a*b) % c? 1 <= a,b,c <=10^18.
Any advice?
Thank you.
| # | User | Rating |
|---|---|---|
| 1 | Benq | 3792 |
| 2 | VivaciousAubergine | 3647 |
| 3 | Kevin114514 | 3603 |
| 4 | jiangly | 3582 |
| 5 | strapple | 3515 |
| 6 | tourist | 3473 |
| 7 | Radewoosh | 3418 |
| 8 | Um_nik | 3376 |
| 9 | potato167 | 3368 |
| 10 | maroonrk | 3361 |
| # | User | Contrib. |
|---|---|---|
| 1 | Qingyu | 162 |
| 2 | adamant | 148 |
| 3 | Um_nik | 146 |
| 4 | Dominater069 | 143 |
| 5 | errorgorn | 141 |
| 6 | cry | 138 |
| 7 | Proof_by_QED | 136 |
| 8 | YuukiS | 135 |
| 9 | chromate00 | 134 |
| 10 | soullless | 133 |
Hi Everyone.
Now I'm wondering about how to count (a*b) % c? 1 <= a,b,c <=10^18.
Any advice?
Thank you.
| Name |
|---|



You can check if your judge allows int128
You can write your own int128 class (it's a lot easier than general bignum). It's harder than 3. but faster.
You can use algorithm similar to fast exponentiation. Instead of a*a*a*...*a (b times) you calculate a+a+a+...+a (b times) so just change * to + in your favorite quick power implementation.
"Binary multiply" O(log(min(a, b))) :
code