Mình đang tìm hiểu về thuật toán Modular Exponentiation (a^b)%c, và công thức thường dùng để giải quyết là: ((a%c)*(b%c))%c.
Nhưng khi mình debug đoạn code sau trên trang vnoi thì có vẻ không giống với công thức:
long long power(long long a, long long b, long long c) {
long long ans = 1;
for(int i = 1; i <= b; i++) {
ans *= a;
ans %= c;
}
return ans;
}
Ví dụ khi tính (5^2)%3 thì theo công thức mình sẽ được: ((5%3)*(5%3))%3.
Nhưng theo đoạn code trên thì sẽ được: ((5%3)*5)%3.
Vẫn cho ra kết quả đúng, nhưng mình không biết tại sao. Mong được các bác lí giải hộ.