

Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
Ý tưởng và thuật toán:
- Với a,m <= 10^3 thì chúng ta sẽ dùng cày trâu
- Với a,m <= 10 ^6 chúng ta sẽ có hướng giải quyết khác:
+ chúng ta thấy a^1 x a^2 x a^3 x ... x a^m = a^1+2+3+...+m (1)
+ chúng ta có công thức 1+2+3+...+m=m*(m+1)/2
+Vậy chúng ta Binary Exponentiation để tính lũy thừa
Code c++:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
long long binpow(long long a, long long b, long long m) {
a %= m;
long long res = 1;
while (b > 0) {
if (b & 1)
res = res * a % m;
a = a * a % m;
b >>= 1;
}
return res;
}
int main()
{
ll t,a,m,mod=1000000007;
cin>>t;
while(t--)
{
cin>>a>>m;
cout<<binpow(a,m*((m+1)/2),mod);
}
}
Hãy giúp mọi người biết câu trả lời này thế nào?
Bảng tin
125
2945
57
mình chưa học tới nhưng công thức 1+...+m = m*(m+1)/2 chứ nhỉ?
108
1362
43
à lộn bn
125
2945
57
và ll t,a,m,mod=10^9+7 để làm gì v
108
1362
43
m*(m+1)/2
108
1362
43
đề kìa bn
108
1362
43
mod là để chia lấy dư
108
1362
43
khai báo biến để nhập
125
2945
57
ok bạn do mình mới chuyển qua c++ nên chưa biết nhiều cho lắm