fork download
  1. #include <bits/stdc++.h>
  2. #define ll long long int
  3. using namespace std;
  4.  
  5. // l^(1/k) < x < r ^ (1/k)
  6. ll find(ll l, ll r){
  7. ll re = 1;
  8. ll le = 1, ri = r+1;
  9. while(le<ri){
  10. ll k = (le+ri)/2;
  11. ll low = ceil(pow(l, 1.0 / k));
  12. ll high = floor(pow(r, 1.0 / k));
  13. if(low<=high){
  14. //cout<<"find11111 l:" << le << " r:"<<ri << " low:"<<low<< " high:"<<high<< " k:"<<k <<"\n";
  15. re = k;
  16. le=k+1;
  17. } else {
  18. //cout<<"find22222 l:" << le << " r:"<<ri << " low:"<<low<< " high:"<<high<< " k:"<<k <<"\n";
  19. ri=k;
  20. }
  21. }
  22.  
  23. return re;
  24. }
  25.  
  26. ll find2(ll num){
  27. ll re = 1;
  28. for(ll i=2;i<=(ll) sqrt(num);i++){
  29. float logaric = log(num)/log(i);
  30. // cout<< i << " logaric " << logaric << " (ll)logaric " << (ll)logaric << endl;
  31. if(logaric - (ll)logaric ==0){
  32. // cout<< "----------- " << logaric << endl;
  33. re = logaric;
  34. return re;
  35. }
  36. }
  37.  
  38. return re;
  39. }
  40.  
  41. int main()
  42. {
  43.  
  44. ll t;
  45. cin>>t;
  46. for(int i=1;i<=t;i++){
  47. ll l,r;
  48. cin>>l>>r;
  49. ll re = 1;
  50. if(l==r) re = find2(l);
  51. else re = find(l,r);
  52. cout<<"Case #"<<i<<": "<<re;
  53. if(i!=t)cout<<"\n";
  54. }
  55.  
  56. return 0;
  57. }
Success #stdin #stdout 0.01s 5288KB
stdin
1
2 100
stdout
Case #1: 6