Minimal Power of Prime

题目传送门

解题思路

先打\(N^\frac{1}{5}\)内的素数表,对于每一个n,先分解\(N^\frac{1}{5}\)范围内的素数,分解完后n变为m,如果m等于1,那么答案就是\(N^\frac{1}{5}\)内分解的素数里的最小数量k。否则,继续分解,此时用来分解的质数都是大于\(N^\frac{1}{5}\)的,所以最多有4个质数相乘,所以只有三种情况:\(P^4\),\(P^3\),\(P^2\),\(P^2*Q^2\),以及答案为1的情况(P,Q为大于\(N^\frac{1}{5}\)的质数)。对于前两种情况,分别看\(m^\frac{1}{4}\),\(m^\frac{1}{3}\)是否是整数,对于三四种情况,其实是一样的,只要看\(m^\frac{1}{2}\)是不是整数就行了,前四种情况都不是,那么答案就是1。

代码如下

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll; inline int read(){
int res = 0, w = 0; char ch = 0;
while(!isdigit(ch)){
w |= ch == '-', ch = getchar();
}
while(isdigit(ch)){
res = (res << 3) + (res << 1) + (ch ^ 48);
ch = getchar();
}
return w ? -res : res;
} ll p(ll a, int b)
{
ll ans = 1;
for(int i = 1; i <= b; i ++)
ans *= a;
return ans;
} int main()
{
int t;
t = read();
vector<int> vec;
for(int i = 2; i <= 4000; i ++){
bool flg = true;
for(int j = 2; j <= sqrt(i); j ++){
if(i % j == 0){
flg = false;
break;
}
}
if(flg)
vec.push_back(i);
}
while(t --){
ll n;
scanf("%lld", &n);
int ans = 100;
for(int i = 0; i < vec.size(); i ++){
int t = vec[i];
int cnt = 0;
while(n % t == 0){
n /= t;
++cnt;
}
if(cnt)
ans = min(ans, cnt);
}
if(n == 1)
printf("%d\n", ans);
else {
for(int i = 4; i >= 1; i --){
if(i == 1)
printf("1\n");
else {
ll x = max((ll)pow(n, 1.0/i) - 5, 1LL);
bool flg = true;
ll m = p(x, i);
while(m < n){
++ x;
m = p(x, i);
}
if(m == n){
printf("%d\n", min(ans, i));
break;
}
}
}
}
}
return 0;
}

最新文章

  1. FireFox调试手机浏览器
  2. mysql 字符串 日期互转
  3. 通过实战理解C语言精要——函数篇
  4. C#获取网页的HTML码、下载网站图片、获取IP地址
  5. Java堆内存的十个要点
  6. Linux用户切换
  7. apache tiles 页面模板的使用
  8. SharePoint 2013 日历视图兼容性问题
  9. Liferay 6.2 改造系列之十三:修改用户编辑页面表单内容
  10. php安全的改进以及检测文件是否被篡改
  11. [转].net连oracle的问题及方法折腾总结 连接字串
  12. Android应用程序的生命周期
  13. RHEL7使用ssm命令管理LVM
  14. hdu 1279 验证角谷猜想(简单的模拟)
  15. 201521123044 《Java程序设计》第14周学习总结
  16. Linux常用资源(不断改进中)
  17. thinkphp5.0验证的封装
  18. 错误模块名称: KERNELBASE.dll错误
  19. 利用exosip DNS CACHE自定义SIP服务器地址和端口
  20. mysql 案例~mysql元数据的sql统计

热门文章

  1. MVC路由解析---IgnoreRoute
  2. apt-cyg for Cygwin(setup-x86_64 .exe )在win10下的安装
  3. &lt;读书笔记&gt;《React:引领未来的用户界面开发框架》
  4. git使用记录二: 给文件重命名的简单方法
  5. spring cloud学习--eureka 01
  6. C++继承中的构造和析构
  7. Robot Framework +钉钉通知(Dingding[钉钉] Plugin)构建通知
  8. matplotlib系列——条形图
  9. 自增主键与UUID的优缺点
  10. JS事件循环(Event Loop)机制