2019 杭电多校 HDU - 6623 Minimal Power of Prime 因子幂最小

题目链接:https://vjudge.net/problem/HDU-6623

题意:输出n,所以质因子幂的最小值

题解:先处理1e4以内的质数,也就1000多个,然后如果没有除尽的话,因子最多也就4个了,所以幂数大于1的情况有p1^4,p1^3, p1^2 , p1^2*p2^2,  对于其他情况肯定有幂为1的。

#include
#include
#include
typedef long long ll;
const int N=10000+118;
int pn,pri[N];
void init(){
    int lim;
    for(int i=2;i=N) break;
            pri[lim]=1;
            if(i%pri[j]==0) break;
        }
    }
}
ll two(ll n){
    ll l=1,r=(ll)pow(n*1.0, 1.0 / 3) + 1,mid;
    while(l<=r){
        mid=(l+r)>>1;
        if(mid*mid*mid==n) return mid;
        else if(mid*mid*mid>n) r=mid-1;
        else l=mid+1;
    }
    return -1;
}
int solve(ll n){
    int ans=100,num;
    for(int i=0;in)
            break;
        if(n%pri[i]==0){
            num=0;
            while(n%pri[i]==0){
                num++;
                n/=pri[i];
            }
            if(num1){
        kg1=sqrt(n);
        if(kg1*kg1==n){
            kg2=sqrt(kg1);
            if(kg2*kg2==kg1) {
            	if(ans>4) ans=4;
			}
            else if(ans>2) ans=2;
        }
        else{
            kg1=two(n);
            if(kg1*kg1*kg1==n) {
            	if(ans>3) ans=3;
			}
            else ans=1;
        }
    }
    return ans;
}
int main()
{
    int t;
    ll n;
    init();
    scanf("%d",&t);
    while(t--){
        scanf("%lld",&n);
        printf("%d\n",solve(n));
    }
    return 0;
}

 

你可能感兴趣的:(思维,数学,数论)