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 ...
随机推荐
- ElasticSearch 通过 Kibana 与 ElasticSearch-head 完成增删改查
本文为博主原创,未经允许不得转载: 1. 安装并配置 elasticSearch ,kibana, elasticsearch-head docker 安装 ElasticSearch 和 Kiba ...
- Jackson 使用 @JsonFormat 注解进行时间格式化
本文为博主原创,未经允许不得转载: 最近帮同事定位了一个现网问题,记录一下: 项目中对所有请求的参数都进行了 Jackson 序列化,在接收请求的实体类字段上使用 @JsonFormat 注解,该注解 ...
- 08-逻辑仿真工具VCS-mismatch
逻辑仿真工具VCS mismatch,预计的仿真结果和实际仿真结果不同,寻找原因? 首先考虑代码,,不要让代码跑到工具的盲区中 其次考虑仿真工具的问题 +race -- 将竞争冒险的情况写到文件中 不 ...
- 他凌晨1:30给我开源的游戏加了UI|模拟龙生,挂机冒险
一.前言 新年就要到了,祝大家新的一年: 龙行龘龘, 前程朤朤! 白泽花了点时间,用 800 行 Go 代码写了一个控制台的小游戏:<模拟龙生>,在游戏中你将模拟一条新生的巨龙,开始无尽的 ...
- 2023 SHCTF-校外赛道 PWN WP
WEEK1 nc 连接靶机直接梭 hard nc 同样是nc直接连,但是出题人利用linux命令的特性,将部分flag放在了特殊文件中 利用ls -a查看所有文件,查看.gift,可以得到前半段 然后 ...
- MyBatis04——使用注解开发
使用注解开发 MyBatis3提供了新的基于注解的配置,但是MyBatis映射并不能用注解来构建. sql类型主要分成: @select @update @insert @delete 注意:利用注解 ...
- Python Code_03数据类型
数据类型 author : 写bug的盼盼 development time : 2021/8/27 19:59 变量定义 name = '阿哈' print(name) print('标识',id( ...
- GB18030-2022 标准学习
GB18030-2022 标准学习 下载 https://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=A1931A578FE14957104988029B08 ...
- [转帖]什么是ClickHouse?
什么是ClickHouse? ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS). 在传统的行式数据库系统中,数据按如下顺序存储: Row WatchID JavaEn ...
- [转帖]iptables开放指定端口
https://www.jianshu.com/p/5b44dd20484c 由于业务的需要, MySQL,Redis,mongodb等应用的端口需要我们手动操作开启 下面以 MySQL 为例,开启 ...