HDU 6623 Minimal Power of Prime
Time limit 1000 ms
Memory limit 65536 kB
OS Windows
中文题意
给一个数n,设将n质因数分解后可以得到
\]
其中\(\omega(n)\)意思是n的不同质因子个数,\(a_i\)是n的质因子。
要求输出最小的\(p_i\)。
题解
看完题解感觉很妙啊——
Let's first factorize \(N\) using prime numbers not larger than \(N^{\frac{1}{5}}\). And let's denote \(M\) as the left part, all the prime factors of \(M\) are larger than \(N^{\frac{1}{5}}\). If \(M=1\) then we are done, otherwise M can only be \(P^2\), \(P^3\), \(P^4\) or \(P^2 \times Q^2\), here \(P\) and \(Q\) are prime numbers.
- If \(M^{\frac{1}{4}}\) is an integer, we can know that \(M=P^4\). Update answer using 4 and return.
- If \(M^{\frac{1}{3}}\) is an integer, we can know that \(M=P^3\). Update answer using 3 and return.
- If \(M^{\frac{1}{2}}\) is an integer, we can know that \(M=P^2\) or \(M=P^2 \times Q^2\). No matter which situation, we can always update answer using 2 and return.
- If (1)(2)(3) are false, we can know that answer=1.
Since there are just \(O(\frac{N^{\frac{1}{5}}}{log(N)})\) prime numbers, so the expected running time is \(O(\frac{TN^{\frac{1}{5}}}{log(N)})\).
官方题解导致我一开始没反应过来的地方在于
M can only be \(P^2\), \(P^3\), \(P^4\) or \(P^2 \times Q^2\),
不是only,\(M\)还可以是\(PQRS\)、\(P^2QR\)、\(PQR\)、\(P^3Q\)、\(P^2Q\),之类的,而这些的答案都是1,也就是题解里编号4所说的,不是前三种情况。
另外一个问题,如何判断\(\sqrt[4]M\)、\(\sqrt[3]M\)、\(\sqrt{M}\)是否是整数呢?我们可以求出\(\sqrt[4]M\)、\(\sqrt[3]M\)、\(\sqrt{M}\)向下取整后的结果,再乘回去,比如,看看是否存在\(\lfloor\sqrt{M}\rfloor^2==M\)。
还有,求\(\lfloor\sqrt[3]{M}\rfloor\)时,pow函数精度不太够,用pow(n,1.0/3.0)会WA,要二分法求。下面这段二分法的代码来自这个博客代码里的two函数,要是有整数解就返回整数解,否则返回负一,这倒是挺好。
还有……复杂度那个log哪里来的?和质数分布有关?
源代码
#include<stdio.h>
#include<math.h>
#include<algorithm>
int T;
long long n;
long long cnt=0;
long long prime[10000];
long long ans;
bool vis[10000];
void shai()//取变量名一次回到解放前。还别说,挺方便的,一目了然
{
for(int i=2;i<=10000;i++)
{
if(!vis[i]) prime[++cnt]=i;
for(int j=1;j<=cnt&&i*prime[j]<=10000;j++)
{
vis[i*prime[j]]=1;
if(i%prime[j]==0)
break;
}
}
}
long long sancigeng(long long a)
{
long long l=1,r=(long long)pow(n*1.0, 1.0 / 3) + 1,mid;
while(l<=r){
mid=(l+r)>>1;
if(mid*mid*mid==n) return mid;
else if(mid*mid*mid>n) r=mid-1;
else l=mid+1;
}
return -1;
}
int main()
{
shai();
//freopen("test.in","r",stdin);
scanf("%d",&T);
while(T--)
{
scanf("%lld",&n);
ans=0x7fffffff;
int pw,pr;
for(int i=1;i<=cnt;i++)
{
if(n%prime[i]==0)
{
pr=prime[i],pw=0;
while(n%pr==0)
{
n/=pr;
pw++;
}
if(pw<ans) ans=pw;
}
if(ans==1)
{
n=1;
break;
}
}
if(n==1)
{
printf("%lld\n",ans);
continue;
}
long long temp1=sqrt(n),temp2=sqrt(temp1),temp3=sancigeng(n);
if(temp2*temp2==temp1&&temp1*temp1==n)
{//algorithm里的max和min不支持long long和int混杂的参数,居然不会隐式类型转换
ans=std::min(ans,4LL);
}
else if(temp3>=0)
{
ans=std::min(ans,3LL);
}
else if(temp1*temp1==n)
{
ans=std::min(ans,2LL);
}
else ans=1;
printf("%lld\n",ans);
}
return 0;
}
HDU 6623 Minimal Power of Prime的更多相关文章
- HDU 6623"Minimal Power of Prime"(数学)
传送门 •题意 给你一个大于 1 的正整数 n: 它可以分解成不同的质因子的幂的乘积的形式,问这些质因子的幂中,最小的幂是多少. •题解 定义 $ans$ 表示最终答案: ①如果 $ans \ge 5 ...
- HDU 6623 Minimal Power of Prime(数学)
传送门 •题意 给你一个大于 1 的正整数 n: 它可以分解成不同的质因子的幂的乘积的形式,问这些质因子的幂中,最小的幂是多少. •题解 把[1,10000]内的素数筛出来,然后对于每个素$P$数遍历 ...
- 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 ...
- 2019杭电多校第四场hdu6623 Minimal Power of Prime
Minimal Power of Prime 题目传送门 解题思路 先打\(N^\frac{1}{5}\)内的素数表,对于每一个n,先分解\(N^\frac{1}{5}\)范围内的素数,分解完后n变为 ...
- [2019杭电多校第四场][hdu6623]Minimal Power of Prime
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6623 题目大意为求一个数的唯一分解的最小幂次.即120=23*31*51则答案为1. 因为数字太大不能 ...
- 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 ...
- 2019HDU多校Minimal Power of Prime——分段讨论&&思维
题目 将 $n$($1 < n \leq 10^{18}$)质因数分解,求质因数幂的最小值. 分析 直接质因数分解,不太行. 可以这样想,对小区间质因数分解,n变小了,再枚举答案. 打印1-10 ...
- 2019hdu多校 Minimal Power of Prime
题目链接:Click here 题目大意:求一个数分解质因数后的最小幂指数 Solution: 首先,我们肯定是不能直接暴力求解的 我们先考虑筛出1e4范围以内的所有质数,把x所有这个范围内的质因子筛 ...
- 【HDOJ6623】Minimal Power of Prime(Powerful Number)
题意:给定大整数n,求其质因数分解的最小质数幂 n<=1e18 思路:常规分解算法肯定不行 考虑答案大于1的情况只有3种:质数的完全平方,质数的完全立方,以及p^2*q^3,p,q>=1三 ...
随机推荐
- 使用TestNG框架测试用例执行顺序问题
既然是讨论执行顺序问题,那么用例肯定是批量执行的,批量执行的方法有mvn test.直接运行testng.xml文件,其中直接运行testng.xml文件的效果与pom文件中配置执行testng.xm ...
- AngularJS——基础小知识(一)
$time0ut :定时器 $rootscope :全局的 $scope : 局部的作用域: 它下面的方法: $scope.$watch $scope.$apply 1)$scope.$wat ...
- MySQL-快速入门(12)备份、还原
1.数据备份 1>使用MySQLdump命令备份(主要的方式) //备份数据库中某张表(去掉表的限定,就是备份指定数据库)//备份脚本可以重新创建表及插入数据mysqldump -u user ...
- Dubbo 序列化协议 5 连问,你接得住不?
1)dubbo 支持哪些通信协议? 2)支持哪些序列化协议? 3)说一下 Hessian 的数据结构? 4)PB 知道吗? 5)为什么 PB 的效率是最高的? 面试官心理分析 上一个问题,说说 dub ...
- 通过QT查找Word中的关键字,并做高亮或删除操作
最近由于项目需要,要用QT操作Word文档.具体的工作需求:在指定的Word文档(*.doc文件/*.docx文件)中查找关键字,找到后做高亮操作或者直接删除操作,然后另存为到别的目录(表示这个文件被 ...
- BZOJ 4033: [HAOI2015]树上染色题解
BZOJ 4033: [HAOI2015]树上染色题解(树形dp) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327400 原题地址: BZOJ 403 ...
- Vue:Elementui中的Tag与页面其它元素相互交互的两三事
前言 公司系统在用elementui做后台开发,不免遇到一些需要自己去根据原有的功能上,加一些交互的功能.今天来介绍下我在用elementUi里的Tag标签与多选框交互的过程,东西听上去很简单,但就是 ...
- 使用英特尔® 驱动程序和支持助理更新英特尔®固态盘数据中心工具(英特尔®固态盘 DCT)后仍旧提示更新
再regedit中搜索原始版本,位于计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{82F015 ...
- [UWP]CompositionLinearGradientBrush加BlendEffect,双倍的快乐
原文:[UWP]CompositionLinearGradientBrush加BlendEffect,双倍的快乐 1. 什么是BlendEffect# 上一篇文章介绍了CompositionLinea ...
- CentOS服务器开放端口
拿到服务器之后接着之前的通信步骤进行,却发现怎么也连接不上.最后发现是因为服务器端的端口5000没有开放.下面记录一下开放端口的过程. 使用命令 netstat -anp 查看端口开放情况.如果显示命 ...