zoukankan      html  css  js  c++  java
  • 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
    ",y);
                int m=99999;
                for(int i=0;i<k;i++)
                {
                //    printf("%d----
    ",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);
                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
    ",m);
            
        }
        }
    }
  • 相关阅读:
    修饰符组合
    嵌入式C摘录
    c语言记事 关于extern和static
    iphone 设置iTunes共享目录
    MapKit 相关
    关于viewDidLoad在[super init]之前执行的问题
    UIScrollView相关
    ASIHttpRequest 学习
    iPhone Locate定位
    UTF7 编码转换
  • 原文地址:https://www.cnblogs.com/2462478392Lee/p/11279747.html
Copyright © 2011-2022 走看看