杭电2019多校第四场 HDU-6623 Minimal Power of Prime(预处理+质因子分解+思维)

链接:http://acm.hdu.edu.cn/showproblem.php?pid=6623

题意:T组样例(最多5e4)。给出一个n(n<=1e18),求n的质因子中最小的指数。

思路:我们先计算1e4内的质因子的指数,并除去。现在他的质因子肯定大于1e4,由于最大为1e18,那么他最多也就是某个质因子p的4次方。我们就枚举\sqrt{n},\sqrt[3]{n},\sqrt[4]{n},再分别看他们的2次方、3次方、4次方是否等于n,更新答案即可。注意开3次时,一定不要用自带的pow函数,会WA的,md,自己写个二分好了,以后记住了。WTF!!

#include <bits/stdc++.h>
#define ll long long
using namespace std; 
const int N = 1e4+10;
ll n;
int ans,prime[N],cnt,e;
bool vis[N];
void get_prime()
{
    for(int i=2;i<=N-10;i++)
    {
        if(!vis[i]) 
            prime[++cnt]=i;
        for(int j=1;j<=cnt&&(ll)i*prime[j]<=N-10;j++)
        {
            vis[i*prime[j]]=1;
            if(i%prime[j]==0) break;
        }
    }
    return ;
}
ll mysqr3(ll x)
{
	ll l=1,r=(ll)pow(1.0*n,1.0/3)+1,m;
	while(l<=r)
	{
		m=(l+r)>>1;
		if(m*m*m==n) return m;
		else if(m*m*m>n) r=m-1;
		else l=m+1;
	}
	return 0;
}
int cal(ll n)
{
    ll sqr2=sqrt(n),sqr4,sqr3;
    if(sqr2*sqr2==n)
    {
        sqr4=sqrt(sqr2);
        if(sqr4*sqr4==sqr2)
            return 4;
        else
            return 2;
    }
    else
    {    
        sqr3=mysqr3(n);
        if(sqr3*sqr3*sqr3==n)
            return 3;
    }
    return 1;
}
int main(void)
{
    get_prime();
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%lld",&n);
        ans=100;
        for(int i=1;i<=cnt&&prime[i]<=n;i++)
        {
            
            if(n%prime[i]==0)
            {
                e=0;
                while(n%prime[i]==0)
                {
                    //cout<<n<<endl;
                    e++;
                    n/=prime[i];
                }
                if(ans>e) ans=e;
            }
        }
        if(n>1&&ans>1) ans=min(ans,cal(n));
        printf("%d\n",ans);
    } 
    
    return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值