Đề bài
Cho hai số nguyên dương a và b (a,b<10^9), thực hiện lần lượt các phép tính sau:
- Đặt M=10^9 + 7;
- Tính x=(a^b+b^a)%M;
- Chuyển x sang nhị phân ta được số y;
- Coi y ở cơ số 3, chuyển y sang hệ thập phân lấy dư khi chia cho M;
Ví dụ:
a=3, b=2
Ta sẽ có các phép tính sau:
x=(3^2+2^3)%M=17
y=10001
kết quả khi chuyển y tư cơ số 3 sang cơ số 10 là 82;
Yêu cầu viết hàm đề giải bài toán trên.
int Simple_powers(int a, int b) {
}
Đây là code ngắn nhất mà em có thể viết được, mong các anh chị góp ý thêm. (183 kí tự)
int64_t e, M=1e9+7, p(int x, int y)
{
if( y == 0) return 1;
e = p(x, y/2);
return y&1? x*e%M*e%M : e*e%M;
}
int64_t t=0, i=0, Simple_powers(int a, int b) {
a=p(a,b)+p(b,a);
while(a%=M)
t+=a%2*p(3,i++),
a/=2;
return t%M;
}
Links bài toán: https://codefights.com/challenge/nntw8bcTzebYRjBMh/main
Em cám ơn