Why my ans is wrong?

#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;
}

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;
    }

}