传送门

•题意

  给你一个大于 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. Linux 配置yum源(互联网)

    Linux 配置yum源(互联网) 环境:操作系统Redhat 7.5 1.卸载现有的yum源 rpm -qa|grep yum|xargs rpm -e --nodeps     #移除与原yum有 ...

  2. BZOJ 4420二重镇题解

    链接 思路借鉴了这个博客: 我们可以想到状压dp 用一个十进制数来表示状态,即第i位表示位置i处的物品等级 用f[i][j][k]表示第i天,仓库的物品等级为j,状态为k时的最大收益 但是状态数貌似很 ...

  3. SPSS统计基础-均值功能的使用

    SPSS统计基础-均值功能的使用 均值过程计算一个或多个自变量类别中因变量的子组均值和相关的单变量统计.您也可以获得单因素方差分析.eta 和线性相关检验. 统计量.合计.个案数.均值.中位数.组内中 ...

  4. echarts radar 一些会用到了的功能记录

    点击雷达图小标题进行相应操作 // options中添加,坐标轴的标签是否响应和触发鼠标事件,默认不响应. radar:{ triggerEvent: true } // 添加监听事件, 点击雷达图标 ...

  5. MSSQL → 02:数据库结构

    一.数据库的组成 在SQL Server 2008中,用户如何访问及使用数据库,就需要正确了解数据库中所有对象及其设置.数据库就像一个容器,它里面除了存放着数据的表之外,还有视图.存储过程.触发器.约 ...

  6. 关于serialize() FormData serializeArray()表单序列化

    serialize()  FormData  serializeArray()都是序列化表单,实现表单的异步提交 但是serialize()和serializeArray()都是只能序列化表单中的数据 ...

  7. 跟我一起认识axure(一)

    第一步下载:https://www.axure.com.cn/ 第二步点击安装,一路next 第三步:认识Axure RP工作界面

  8. Implement strStr() 字符串匹配

    Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if needle ...

  9. KiCad Mark 点名称

    KiCad Mark 点名称 Mark 点的用处是给 IC 等高密度的元件在贴片时定位参考.

  10. oralce CUBE

    select id,area,stu_type,sum(score) score from students group by cube(id,area,stu_type) order by id,a ...