题目链接

题目

题目描述

对于给定的正整数 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 立方数的更多相关文章

  1. noip模拟赛 立方数2

    题目描述LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方数,例如1,8,27就是最小的3个立方数.LYK还定义了一个数叫“立方差数”,若一个数可以被写作是两个立 ...

  2. noip模拟赛 立方数

    题目描述LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方数,例如1,8,27就是最小的3个立方数.现在给定一个数P,LYK想要知道这个数是不是立方数.当然你有可 ...

  3. UVA11137(立方数之和)

    题意:       给你一个n(<=10000),问他如果由立方数之和组成,那么有多少种方法? 思路:        一个地推公式,d[i][j] 表示用不大于i的数字去组合j这个数字有多少种方 ...

  4. [uva11137]立方数之和·简单dp

    小水题再来一发 给定一个正整数n<=1e4,求将n写成若干个正整数立方和的方法数 典型的多阶段模型 f[i][j]表示当前用到1~i的数,累计和为j的方案数. #include<cstdi ...

  5. 2020牛客寒假算法基础集训营6 E.立方数(唯一分解定理 素数筛)

    https://ac.nowcoder.com/acm/contest/3007/E 放下题解 #include<bits/stdc++.h> using namespace std; t ...

  6. 列表屏幕(List Screen)

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  7. UVA - 11137 Ingenuous Cubrency[背包DP]

    People in Cubeland use cubic coins. Not only the unit of currency iscalled a cube but also the coins ...

  8. Objective-C语言控制语句

    • 分支语句• 循环语句• 跳转语句 Objective-C中的控制语句有以下几类:• 分支语句:if-else, switch• 循环语句:while, do-while, for• 与程序转移有关 ...

  9. 有趣的数-回文数(Palindrome number)

    文章转自http://blog.163.com/hljmdjlln@126/blog/static/5473620620120412525181/ 做LC上的题"Palindrome num ...

  10. 山东省第六届ACM省赛

    A.Nias and Tug-of-War(sort排序) B.Lowest Unique Price(set+map) C.Game!(博弈) D.Stars E.BIGZHUGOD and His ...

随机推荐

  1. 【动画进阶】神奇的 3D 卡片反光闪烁动效

    最近,有群里在群里发了这么一个非常有意思的卡片 Hover 动效,来源于此网站 -- key-drop,效果如下: 非常有意思酷炫的效果.而本文,我们不会完全还原此效果,而是基于此效果,尝试去制作这么 ...

  2. 【ArgParse】一个开源的入参解析库

    项目地址:argtable3 本地验证: 编译构建 新增验证 // examples/skull.c #include "argtable3.h" int main(int arg ...

  3. 你老了,别搞IT了……

    你老了,别搞IT了-- [来源]

  4. 2023强网拟态crypto-一眼看出

    1.题目信息 一眼看穿 查看代码  from Crypto.Util.number import * from secret import flag import gmpy2 flag=b'' r = ...

  5. Redis-主从复制-哨兵模式

  6. Python学习之十六_virsh批量获取虚拟机IP地址的方法

    Python学习之十六_virsh批量获取虚拟机IP地址的方法 Linux命令说明 for j in \ $(for i in `virsh list |grep -v Id |grep runnin ...

  7. [转帖]解决Harbor在服务器重启后无法自启动的问题

    问题 当部署Harbor的服务器在重启之后,可能会出现Harbor无法跟随系统自启动 解决方案 现假设Harbor的安装目录位置为/usr/local/harbor,在Harbor安装完成之后,在此目 ...

  8. [转帖]058、集群优化之PD

    PD调度基本概念 调度流程 调度中还有这还缺来了merge,例如合并空region. store: 基本信息,容量,剩余空间,读写流量等 region: 范围,副本分布,副本状态,数据量,读写流量等 ...

  9. [转帖]tidb Modify Configuration Dynamically

    https://docs.pingcap.com/tidb/v6.5/dynamic-config This document describes how to dynamically modify ...

  10. [转帖]【MySQL 8】MySQL 5.7都即将停只维护了,是时候学习一波MySQL 8了!

    https://juejin.cn/post/7111255789876019208 MySQL 8新特性 选择MySQL 8的背景:MySQL 5.6已经停止版本更新了,对于 MySQL 5.7 版 ...