Biết rằng \((a\ *\ b) \bmod c = ((a \bmod c)\ *\ (b \bmod c))\ \bmod c\)
Ví dụ: \((10\ *\ 3) \bmod 4 = 2\) và \(((10 \bmod 4)\ *\ (3 \bmod 4)) \bmod 4 = 6 \bmod 4 = 2;\) trong khi đó giới hạn biểu diễn của long long là cỡ \(18\) chữ số, hãy tính \((a\ *\ b) \bmod c\) khi mà tích \((a\ *\ b)\) có thể vượt quá khả năng biểu diễn của long long trong \(C++.\)
Trong bài này, số \(c\) có thể lên đến \(10^{18}\), đây là một điều khá tệ vì sau khi \(\bmod\) xong, ta nhân lại vẫn có thể tràn số. Để khắc phục điều này, bạn hãy tìm hiểu về phép nhân Ấn độ, hoặc bạn liên hệ Mr Toàn để có một trick khá hay cho phép toán này nhé!
Yêu cầu
Tính \((a\ *\ b) \bmod c\)
Dữ liệu
-
Dòng 1 chứa 2 số nguyên dương \(a\) và \(b\) (\(a,b \leq 10^{18}\));
-
Dòng 2 ghi số nguyên dương \(c\) (\(c \leq 10^{18}\)).
Kết quả
In ra kết quả của \((a\ *\ b) \bmod c.\)
Ví dụ
INPUT | OUTPUT |
---|---|
473533207341277217 661950249426733688 47834567961336203 |
20568985178261806 |