传送门

•题意

  给你一个大于 1 的正整数 n;

  它可以分解成不同的质因子的幂的乘积的形式,问这些质因子的幂中,最小的幂是多少。

•题解

  定义 $ans$ 表示最终答案;

  ①如果 $ans \ge 5$:

    那么,肯定有 $n=p^{ans}\ ,\ p \le \sqrt[{ans}]{n}$,也就是说 $\ p \le 10^{\frac{18}{5}}$;

  所以,我们可以提前预处理出 $[1,10000]$ 内的素数,筛出 $n$ 中属于 $[1,10000]$ 内的质因子;

  如果在这个过程中出现 $n=1$ 或者 $ans=1$,那么直接返回 $ans$ 即可;

  如果筛完 $[1,10000]$ 内的素数后,$n > 1$,那么,就有如下情况:

    (1)存在质数 p,满足 p > 10000 并且 n 只能分解出一个 p,此时应输出 1;

    (2)存在质数 p,q,满足 p > 10000 , q > 10000,有 $n = p^2$ 或 $n = p^2 \cdot q^2$,对于这种情况,$n$ 肯定是个完全平方数;

    (3)存在质数 p,满足 p > 10000,并且有 $n=p^3$,这种情况下,$n$ 肯定是个立方数;

    (4)存在质数 p,满足 p > 10000,并且有 $n=p^4$;

  如果情况(1)成立,那么,情况(2)(3)(4)肯定不成立,但是情况(1)可能不好直接判断;

  那么,我们可以先判断情况(4)(2)(3)是否成立,如果不成立,那么(1)肯定成立;

  疑惑(1):如果 $(\sqrt[4]{n})^4=n$,那为什么一定有 $\sqrt[4]{n}$ 为素数呢?

    定义 $x=\sqrt[4]{n}$,那么有 $x \le 10^{\frac{18}{4}}$;

    如果 $x$ 为合数,那么势必存在某个大于 1 因子 f,$f \le \sqrt{x} < 10^4$;

    但,来到此步的条件是 $n$ 中所有属于 $[1,10000]$ 内的质因子已被筛走,所以,是不存满足条件的 $f$ 的;

       所以说,$x$ 一定是个素数;

  疑惑(2):为什么要先判断情况(4)再判断情况(2):

    因为满足情况(4)肯定满足情况(2),但是此时满足情况(2)的因子就不是质因子了;

•Code

 #include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
const int N=1e4; ll n;
int cnt;
int prime[N];
bool isPrime[N+]; void Prime()
{
cnt=;
mem(isPrime,true);
isPrime[]=false; for(int i=;i <= N;++i)
{
if(isPrime[i])
prime[++cnt]=i; int x;
for(int j=;j <= cnt && (x=i*prime[j]) <= N;++j)
{
isPrime[x]=false; if(i%prime[j] == )
break;
}
}
}
bool Calc(ll x)
{
int l=,r=(int)1e6+;
while(r-l > )
{
ll mid=l+((r-l)>>);
if(mid*mid*mid > x)
r=mid;
else
l=mid; if(mid*mid*mid == x)
return true;
}
return false;
}
int Solve()
{
int ans=;
for(int i=;i <= cnt;++i)
{
int k=;
while(n%prime[i] == )
{
k++;
n /= prime[i];
}
if(k)
ans=min(ans,k); if(n == || ans == )
return ans;
} ll x=sqrt(sqrt(n));
ll y=sqrt(n); if(x*x*x*x == n)
ans=min(ans,);
else if(y*y == n)
ans=min(ans,);
else if(Calc(n))
ans=min(ans,);
else
ans=; return ans;
}
int main()
{
Prime(); int T;
scanf("%d",&T);
while(T--)
{
scanf("%lld",&n);
printf("%d\n",Solve());
}
return ;
}

HDU 6623"Minimal Power of Prime"(数学)的更多相关文章

  1. HDU 6623 Minimal Power of Prime(数学)

    传送门 •题意 给你一个大于 1 的正整数 n: 它可以分解成不同的质因子的幂的乘积的形式,问这些质因子的幂中,最小的幂是多少. •题解 把[1,10000]内的素数筛出来,然后对于每个素$P$数遍历 ...

  2. HDU 6623 Minimal Power of Prime

    Time limit 1000 ms Memory limit 65536 kB OS Windows 中文题意 给一个数n,设将n质因数分解后可以得到 \[n=\prod_{i=1}^{\omega ...

  3. 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 ...

  4. 2019杭电多校第四场hdu6623 Minimal Power of Prime

    Minimal Power of Prime 题目传送门 解题思路 先打\(N^\frac{1}{5}\)内的素数表,对于每一个n,先分解\(N^\frac{1}{5}\)范围内的素数,分解完后n变为 ...

  5. [2019杭电多校第四场][hdu6623]Minimal Power of Prime

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6623 题目大意为求一个数的唯一分解的最小幂次.即120=23*31*51则答案为1. 因为数字太大不能 ...

  6. 2019 Multi-University Training Contest 4 - 1010 - Minimal Power of Prime

    http://acm.hdu.edu.cn/showproblem.php?pid=6623 题意,给50000个1e18级别的数N,求它质因数分解里面的最小的指数(不算0) 比赛的时候给划了一个1e ...

  7. 2019HDU多校Minimal Power of Prime——分段讨论&&思维

    题目 将 $n$($1 < n \leq 10^{18}$)质因数分解,求质因数幂的最小值. 分析 直接质因数分解,不太行. 可以这样想,对小区间质因数分解,n变小了,再枚举答案. 打印1-10 ...

  8. 2019hdu多校 Minimal Power of Prime

    题目链接:Click here 题目大意:求一个数分解质因数后的最小幂指数 Solution: 首先,我们肯定是不能直接暴力求解的 我们先考虑筛出1e4范围以内的所有质数,把x所有这个范围内的质因子筛 ...

  9. 【HDOJ6623】Minimal Power of Prime(Powerful Number)

    题意:给定大整数n,求其质因数分解的最小质数幂 n<=1e18 思路:常规分解算法肯定不行 考虑答案大于1的情况只有3种:质数的完全平方,质数的完全立方,以及p^2*q^3,p,q>=1三 ...

随机推荐

  1. OpenCV灰度化图像

    OpenCV2版本号非常多函数发生了变化.比如二值化,其演示样例: void CmyMFC2Dlg::OnBnClickedButton1() { // TODO: Add your control ...

  2. CWnd::Attach()具体解释

    CWnd::Attach Attaches a Windows window to a CWnd object. BOOL Attach(    HWND hWndNew ); Parameters ...

  3. 为Apple Watch而战-----(初级篇)

    重要 本文档是开发过程中使用的API或者技术的初步文档.苹果提供该文档以便于开发者使用苹果产品上使用技术和编程接口.后期该文档中信息会有所变动,所以依据本文档开发的软件应当使用最终的操作系统软件进行测 ...

  4. 洛谷P1316 P1824

    P1316 丢瓶盖 题目描述 陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以 ...

  5. poj3422 最小费用流

    一遍的话秩序要dp就好,但是这里要删去点.此题可以转化为最小费用流.开始我想了半天纠结怎么处理到过一次后值变0,看了书之后发现拆点解决了这个问题. 对于点t,拆为t-->t',容量为1,费用为负 ...

  6. Leetcode733.Flood Fill图像渲染

    有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间. 给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newCol ...

  7. Balanced Binary Tree 判断平衡二叉树

    Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...

  8. 17个你必须牢记的Win10快捷键

    电脑初学者掌握了盲打技术,可以提高录入速度:游戏玩家掌握了快捷键,可以在瞬息百变的对战中提高生存的机会:而Windows玩家掌握了快捷键,不但可以提高电脑操作速度,更能享受到初级玩家望着你那仰慕的眼神 ...

  9. 通过 FastAdmin 理解开源软件

    通过 FastAdmin 理解开源软件 开源软件 ≠ 免费软件,免费是遵循其开源协议下的一个特性. 开源软件虽然免费,但服务是可以收费的,因为房子要钱. 开源的目的是为了用户更自由. 做开源每天会遇到 ...

  10. 2019-6-23-WPF-网络-request-的-read-方法不会返回

    title author date CreateTime categories WPF 网络 request 的 read 方法不会返回 lindexi 2019-06-23 11:26:26 +08 ...