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>
using namespace std;
int a[1000010];
int b[1000010];
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(y4*y4*y4*y4==n)
            {
                m=min(m,4);
             } 
             else if(y3*y3*y3==n)
             {
                 m=min(m,3);
             }
             else if(y2*y2==n)
             {
                 m=min(m,2);
             }
             else
             {
                 m=min(m,1);
             }
        }
             printf("%d\n",m);
        
    }
    }
}

官方题解写的代码还是wa了。。。

猜你喜欢

转载自www.cnblogs.com/2462478392Lee/p/11279747.html