NC201985 立方数
题目
题目描述
对于给定的正整数 N,求最大的正整数 A,使得存在正整数 B,满足 \(A^3B=N\)
输入包含 T 组数据,1≤T≤10,000;\(1≤N≤10^{18}\)
输入描述
第一行数字 T 表示数据组数
接下来一行,T 个正整数 N
输出描述
T 行,每行一个数字表示答案
示例1
输入
4
27 24 7 54
输出
3
2
1
3
题解
知识点:分解质因数,枚举。
直接枚举 \(A\) 的复杂度是 \(O(\sqrt[3]{n})\) ,但有 \(10^4\) 组数据,所以是不行的。
考虑对 \(N\) 分解质因数,从小到大枚举质因数,将幂次大于 \(3\) 的质因数的幂次给 \(A\) 即可。直到幂次小于等于 \(3\) ,此时要么剩下唯一一个质因子的 \(3\) 次方,要么都不足 \(3\) 次方,特判即可。
此时,还需要预处理 \(O(\sqrt[4] n)\) 内的素数,因为单纯枚举质因子还是会超时。
时间复杂度 \(O \left( T \cdot \dfrac{\sqrt[4]n}{\log n} \right)\)
空间复杂度 \(O(\sqrt[4]n)\)
代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 31622;// 10^(18/4),质因子幂次小于等于3时可以直接特判
bool vis[N];
vector<int> prime;
void get_prime(int n) {
for (int i = 2;i <= n;i++) {
if (!vis[i]) prime.push_back(i);
for (auto j : prime) {
if (i * j > n) continue;
vis[i * j] = 1;
if (!(i % j)) break;
}
}
}
ll get_pfactor(ll n) {
ll ans = 1;
for (auto i : prime) {
if (i * i * i * i > n) break;
int cnt = 0;
while (!(n % i)) n /= i, cnt++;
for (int j = 3;j <= cnt;j += 3) ans *= i;
}
ll t = pow(n, 1.0 / 3);
if (n == t * t * t) ans *= t;
else if (n == (t + 1) * (t + 1) * (t + 1)) ans *= t + 1;
return ans;
}
bool solve() {
ll n;
cin >> n;
cout << get_pfactor(n) << '\n';
return true;
}
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t = 1;
cin >> t;
get_prime(N);
while (t--) {
if (!solve()) cout << -1 << '\n';
}
return 0;
}
NC201985 立方数的更多相关文章
- noip模拟赛 立方数2
题目描述LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方数,例如1,8,27就是最小的3个立方数.LYK还定义了一个数叫“立方差数”,若一个数可以被写作是两个立 ...
- noip模拟赛 立方数
题目描述LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方数,例如1,8,27就是最小的3个立方数.现在给定一个数P,LYK想要知道这个数是不是立方数.当然你有可 ...
- UVA11137(立方数之和)
题意: 给你一个n(<=10000),问他如果由立方数之和组成,那么有多少种方法? 思路: 一个地推公式,d[i][j] 表示用不大于i的数字去组合j这个数字有多少种方 ...
- [uva11137]立方数之和·简单dp
小水题再来一发 给定一个正整数n<=1e4,求将n写成若干个正整数立方和的方法数 典型的多阶段模型 f[i][j]表示当前用到1~i的数,累计和为j的方案数. #include<cstdi ...
- 2020牛客寒假算法基础集训营6 E.立方数(唯一分解定理 素数筛)
https://ac.nowcoder.com/acm/contest/3007/E 放下题解 #include<bits/stdc++.h> using namespace std; t ...
- 列表屏幕(List Screen)
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- UVA - 11137 Ingenuous Cubrency[背包DP]
People in Cubeland use cubic coins. Not only the unit of currency iscalled a cube but also the coins ...
- Objective-C语言控制语句
• 分支语句• 循环语句• 跳转语句 Objective-C中的控制语句有以下几类:• 分支语句:if-else, switch• 循环语句:while, do-while, for• 与程序转移有关 ...
- 有趣的数-回文数(Palindrome number)
文章转自http://blog.163.com/hljmdjlln@126/blog/static/5473620620120412525181/ 做LC上的题"Palindrome num ...
- 山东省第六届ACM省赛
A.Nias and Tug-of-War(sort排序) B.Lowest Unique Price(set+map) C.Game!(博弈) D.Stars E.BIGZHUGOD and His ...
随机推荐
- Java之利用openCsv导出csv文件
当时导入的时候用的openCsv,那么导出的时候自然也是用这个,查了好多资料才找到解决方案,下面记录一下实现过程. 1.Controller层: /** * 导出csv文件 */ @RequestMa ...
- SpringBoot中使用LocalDateTime踩坑记录
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- Go-数组-切片
- [转帖]mysql-connect-java驱动从5.x升级到8.x的CST时区问题
https://juejin.cn/post/7029291622537887774 前言 旧项目MySQL Java升级驱动,本来一切都好好的,但是升级到8.x的驱动后,发现入库的时间比实际时间 ...
- [转帖]Intel、海光、鲲鹏920、飞腾2500 CPU性能对比
https://plantegg.github.io/2021/06/18/%E5%87%A0%E6%AC%BECPU%E6%80%A7%E8%83%BD%E5%AF%B9%E6%AF%94/ Int ...
- [转帖]远超DDR4,速度可达DDR5 6400!DDR5内存技术、产品解析
https://www.sohu.com/a/326810241_616364 内存是计算机技术的重要组成部分,经历了长时间的竞争更替和路线选择之后,PC内存技术被稳定在以DDR技术为基础的发展路线上 ...
- Nginx 发布 Docker 运行日志的方法
背景 公司这边想进行容器化负载均衡部署. 脚本很简单, 已经实现了, 但是发现我这边没有ELK也没有LOKI 又不太像切入到容器内部进行 获取日志信息. 所以我这边想了一个别的招来动态刷新日志. 思路 ...
- drools规则动态化实践
作者:京东物流 李振 康睿 刘斌 王北永 一 . 规则引擎业务应用背景 业务逻辑中经常会有一些冗长的判断,需要写特别多的if else,或者一些判断逻辑需要经常修改.这部分逻辑如果以java代码来实现 ...
- 【K哥爬虫普法】百度、360八年恩怨情仇,robots 协议之战终落幕
我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识,知 ...
- lua开发和调试环境
Lua开发环境搭建 Lua官网提供源码下载需要自己编译,Lua官网:https://www.lua.org/ftp/ lua for windows.exe(占二十多MB那个) 目前在网络上没有找到 ...