# Solution Lũy thừa link đề: https://oj.vnoi.info/problem/power ## Tóm đề - dòng đầu đề cho t là số test case - mỗi t dòng tiếp theo sẽ có 2 số l và r - yêu cầu tìm số k lớn nhất sao cho thỏa mãn $l\le x^k\le r$ ## Hướng giải vì $2^{40}>10^{12}$ nên ta có thể cho chạy for k từ 39 trở xuống dùng binary search để kiểm tra xem liệu có $x$ tồn tại thỏa mãn điều kiện ko nếu không thì hạ k xuống và tiếp tục kiểm tra ## Code mẫu ```cpp= #include<iostream> #include<cmath> using namespace std; int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int t; cin>>t; for(int j=1;j<=t;j++){ //for j cho mỗi test case long long l,r,ans=1; cin>>l>>r; long long lo,hi,mid,b=2; for(long long i=39;i>1;i--){ //for i thử mỗi số mũ k while(pow(b,i)<r)b*=2; //xác định biên trên hi hi=b;lo=2;//biên dưới lo while(lo<hi){ //binary search mid=(lo+hi)/2; if(pow(mid,i)>r)hi=mid; //ko -1 tránh mất số //lí do vì ko check mid trước :b else if(pow(mid,i)<l)lo=mid+1; //+1 tránh lặp vô hạn else{ //tìm đc k lớn nhất ans=i; break; } } if(ans!=1)break; //đã có kết quả, dừng lặp } cout<<"Case #"<<j<<": "<<ans<<endl; } } ```