#include <bits/stdc++.h>
using namespace std;
const int maxn=1e4+5;
typedef long long ll;
ll n;
int prime[maxn],cnt,e,ans;
bool vis[maxn];
void get_prime(){
for(int i=2;i<maxn;i++){
if(!vis[i]) prime[cnt++]=i;
for(int j=0;j<cnt&&i*prime[j]<maxn;j++){
vis[i*prime[j]]=true;
if(i%prime[j]==0) break;
}
}
}
ll mysqrt3(ll x)
{
ll l=1,r=1e6+5,m;
while(l<=r){
m=(l+r)>>1;
if(m*m*m==x) return m;
else if(m*m*m>x) r=m-1;
else l=m+1;
}
return 0;
}
int cal(ll n){
ll sqrt2=sqrt(n),sqrt3,sqrt4;
if(sqrt2*sqrt2==n){
sqrt4=sqrt(sqrt2);
if(sqrt4*sqrt4==sqrt2) return 4;
else return 2;
}
else{
sqrt3=mysqrt3(n);
if(sqrt3*sqrt3*sqrt3==n) return 3;
}
return 1;
}
int main(){
get_prime();
int T; cin>>T;
while(T--){
scanf("%lld",&n); ans=100;
for(int i=0;i<cnt&&prime[i]<=n;i++){
if(n%prime[i]==0){
e=0;
while(n%prime[i]==0){
e++;
n=n/prime[i];
}
ans=min(ans,e);
}
}
if(ans>1&&n>1) ans=min(ans,cal(n));
printf("%d\n",ans);
}
return 0;
}
来源:https://blog.csdn.net/BX2359575459/article/details/98881319