#include
using namespace std;
int main(){
int k,t,ans,e;
long long int n,mid,p;
cin>>t;
for(int i=0;i<t;i++){
cin>>n;
cin>>k;
int d=0;
if(n>100000000){
e=100;
}
else{
e=n;
}
int s=0;
while(s<=e){
mid=(s+e)/2;
p=mid;
int f=1,z=0;
while(f<=k){
if(p>n){
z=1;
break;
}
f++;
p=p*mid;
}
if(z==0){
ans=mid;
s=mid+1;
}
else{
e=mid-1;
}
}
cout<<ans<<endl;
}
return 0;
}
Why my ans is wrong?
You need to follow the approach as,
long long int s=0,e=n;
long long ans;
long long int x;
long long int mid;
while(s<=e)
{
mid=(s+e)/2;
if(pow(mid,p)==n)
{
ans= mid;
break;
}
else
if(pow(mid,p)<n)
{
ans=mid;
s=mid+1;
}
else
if(pow(mid,p)>n)
{
e=mid-1;
}
}