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);

    }
    }
}

原文地址:https://www.cnblogs.com/2462478392Lee/p/11279747.html

时间: 2024-10-08 21:05:55

Minimal Power of Prime的相关文章

HDU 6623 Minimal Power of Prime(思维)题解

题意: 已知任意大于\(1\)的整数\(a = p_1^{q_1}p_2^{q_2} \cdots p_k^{q_k}\),现给出\(a \in [2,1e18]\),求\(min\{q_i\},q \in [1, k]\).即求质因数分解后,最小指数是多少. 思路: 因为\(a \in [2,1e18]\),所以我们现打一个\(1e4\)以内的质数表,然后直接求出\(1e4\)以内的情况. 上面弄完了,那么现在最多只有\(4\)个质因子,情况如下: \(n = p^4\),这种情况就是\(4\

HDU 6623&quot;Minimal Power of Prime&quot;(数学)

传送门 •题意 给你一个大于 1 的正整数 n: 它可以分解成不同的质因子的幂的乘积的形式,问这些质因子的幂中,最小的幂是多少. •题解 定义 $ans$ 表示最终答案: ①如果 $ans \ge 5$: 那么,肯定有 $n=p^{ans}\ ,\ p \le \sqrt[{ans}]{n}$,也就是说 $\ p \le 10^{\frac{18}{5}}$: 所以,我们可以提前预处理出 $[1,10000]$ 的素数表 •Code 1 #include<bits/stdc++.h> 2 us

夜深人静写题解--杭电第四场

1001.AND Minimum Spanning Tree 题意:已知一个完全图,共有N个点,按1-N编号,点与点之间的边权为两点的编号相与,求权值和最小生成树,相同权值和输出最小的字典序方案 思路:为了保证可以得到权值和最小,对于每个点可以贪心的去找与其与值最小的点,为保证字典序最小,应找到第一个与其相与可以得到最小的点 方案:枚举每个点二进制位上最低0的位置,得到相遇的点,比如X的二进制位1110011110111,则与其相与的最小的点为1000,若用此方法找到的值比N值大,则将其与1相与

2019 hdu 第四场补题 (1 ,签到题

因为太菜了,前几场的题都没补,从今天开始慢慢补 以后晚上要早睡,早上早起,抽出时间看书,每天只肝一局杀戮尖塔,上床不玩手机 每周五把一周总结的板子打印下来,毕竟老年人记性 补题顺序按难度升序 1001 AND Minimum Spanning Tree 题意:定义边的权值为两结点的&和,构造字典序最小的最小生成树 分析: 1.构造型算法 2.二进制数字默认有前导0,在纸上随便画画就发现构造将相邻点最低位0置为1,其余位为0为最优解,如果范围不够则直接置为1 题解: 1001. AND Minim

2019 杭电多校 第四场

2019 Multi-University Training Contest 4 补题链接:2019 Multi-University Training Contest 4 1001 AND Minimum Spanning Tree (HDU 6614) 题意 给定一个有 \(N\) 个结点的完全图,编号从 \(1\) 到 \(N\).结点 \(x\) 与结点 \(y\) \((1\leq x, y\leq N, x \neq y)\) 的边的权值为 \(x\) 与 \(y\) 按位与的值,求

abs 暴力

Given a number x, ask positive integer y≥2y≥2, that satisfy the following conditions: 1. The absolute value of y - x is minimal 2. To prime factors decomposition of Y, every element factor appears two times exactly. InputThe first line of input is an

ibm x3550m4 开启cpu高性能模式

1.必须进bios里调整,和调整超线程一样,重启服务器按F1进bios界面,选择system settings 2.选择最大性能模式:Operating Modes>Choose Operating>Maximnm Performance. Minimal Power Efficiency - Favor Power Efficiency - Favor Performance Custom Mode Maximum Performance 3.开启超线程:Processors>Hype

HDU 5778 abs (暴力枚举)

abs Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 399    Accepted Submission(s): 140 Problem Description Given a number x, ask positive integer y≥2, that satisfy the following conditions:1.

Bestcoder Round #85

A:问一个长度为n小于等于100000的序列是否存在能整除m的连续子段. 前缀和之后,$ S[l,r] = S(r) - S(l-1) $ 取余m后只要查询在S里是否存在出现两次的数值即可. 注意事项:由于是多组数据的题目,一定要把上一组的数字读完,而不是得出了答案直接break!!!!!! 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 5 #define N 100010 6 7 us