UVA 10622 - Perfect P-th Powers(唯一分解+gcd)

题目链接 https://cn.vjudge.net/problem/UVA-10622

【题意】
给你一个非0整数 n,要求你把 n 写成 n=ap 的形式,其中 ap 均为整数,那么问你p最大能是多少

【思路】
n 唯一分解,然后求各个素因数个数的gcd就可以了,如果是负数的话,答案必须为奇数,不断除2即可

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

bool flag;
ll n;
vector<int> vt;

int gcd(int a,int b){
    if(b==0) return a;
    return gcd(b,a%b);
}

int main(){
    //freopen("in.txt","r",stdin);
    //freopen("out2.txt","w",stdout);
    while(scanf("%lld",&n)==1 && n){
        vt.clear();
        flag=n<0?true:false;
        n=abs(n);
        int m=sqrt(n)+0.5;
        for(int i=2;i<=m;++i){
            if(n%i==0){
                int cnt=0;
                while(n%i==0){
                    n/=i;
                    ++cnt;
                }
                vt.push_back(cnt);
                if(n==1) break;
            }
        }
        if(n>1) vt.push_back(1);
        int ans=vt[0];
        for(int i=1;i<vt.size();++i){
            ans=gcd(ans,vt[i]);
        }
        if(flag){
            while(ans%2==0) ans/=2;
        }
        printf("%d\n",ans);
    }
    return 0;
}
posted @ 2018-08-25 21:27  不想吃WA的咸鱼  阅读(165)  评论(0编辑  收藏  举报