Minimal Power of Prime

题目链接

题意:输入n,求所有质因子幂的最小值。n奇大无比。

思路:先对n所有n开五次方根的质因子约完,然后如果没有除尽的话,因子最多也就4个了,所以幂数大于1的情况有p1^4,p1^3, p1^2  对于其他情况肯定有幂为1的。

然后注意一下精度问题。

 

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
int a[1000010];
int b[1000010];
ll qp(ll x, int y) {
    ll ans = 1;
    for(int i=1;i<=y;i++) ans*=x;
    return ans;
}
int main()
{
    int t,k=0;
    for(int i=2;i<=1000000;i++)
    {
        if(b[i]==0)
        {
            a[k++]=i;
            for(int j=i+i;j<=1000000;j+=i)
            {
                b[j]=1;
            }
        }
    }
    while(~scanf("%d",&t))
    {
        while(t--)
        {
            long long n;
            scanf("%lld",&n);
            int y=powl(n,1/5.0);
        //    printf("y:%d\n",y);
            int m=99999;
            for(int i=0;i<k;i++)
            {
            //    printf("%d----\n",a[i]);
                if(a[i]>y)
                break;
                if(n%a[i]==0)
                {
                    
                    int r=0;
                    while(1)
                    {
                        if(n%a[i])
                        {
                            break;
                        }
                        n/=a[i];
                        r++;
                    }
                    m=min(m,r);
                }
                
            }
            //printf("%lld\n",n);
            if(n!=1){
            long long y4=powl(n,1/4.0);
            long long y3=powl(n,1/3.0);
            long long y2=powl(n,1/2.0);
            if(qp(y4,4)==n||qp(y4+1,4)==n||qp(y4-1,4)==n)
            {
                m=min(m,4);
             } 
             else if(qp(y3,3)==n||qp(y3+1,3)==n||qp(y3-1,3)==n)
             {
                 m=min(m,3);
             }
             else if(qp(y2,2)==n||qp(y2+1,2)==n||qp(y2-1,2)==n)
             {
                 m=min(m,2);
             }
             else
             {
                 m=min(m,1);
             }
        }
             printf("%d\n",m);
        
    }
    }
}

 

posted @ 2019-07-31 23:09  Ldler  Views(333)  Comments(0Edit  收藏  举报