Minimal Power of Prime

戏子无情 提交于 2019-11-26 14:01:51
#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;
}


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!