立方数

news/2025/11/21 23:27:23/文章来源:https://www.cnblogs.com/onlyblues/p/19254585

立方数

题目描述

对于给定的正整数 $N$,求最大的正整数 $A$,使得存在正整数 $B$,满足 $A^3B=N$。

输入包含 $T$ 组数据,$1 \leq T \leq 10000$;$1 \leq N \leq 10^{18}$。

输入描述:

第一行数字 $T$ 表示数据组数。

接下来一行,$T$ 个正整数 $N$。

输出描述:

$T$ 行,每行一个数字表示答案。

示例1

输入

4
27 24 7 54

输出

3
2
1
3

 

解题思路

  感觉这题的正解挺难想到的,也很难解释为什么会这么想,我尽量构造一下其中的逻辑链。

  将 $N$ 分解成质因子乘积的形式 $N = P_1^{\alpha_1} P_2^{\alpha_2} \cdots P_m^{\alpha_m}$,那么最大 $A$ 就是 $P_1^{\left\lfloor \alpha_1/3 \right\rfloor} P_2^{\left\lfloor \alpha_2/3 \right\rfloor} \cdots P_m^{\left\lfloor \alpha_m/3 \right\rfloor}$。因此只有幂次至少为 $3$ 的质因子才对 $A$ 有贡献。但问题在于,我们得先知道 $N$ 的质因子分解,才能计算出这些幂次,而要枚举 $N$ 以内的质数显然不可行。

  我们可以先从枚举约数的方法开始,把 $A^3 B = N$ 中的 $A^3$ 与 $B$ 看作是 $N$ 的约数。我们可以枚举 $N$ 的所有约数 $d$,如果 $\sqrt[3]{d}$ 是整数,则说明存在一个满足条件的 $A = \sqrt[3]{d}$。我们只需要找到所有约数中 $\sqrt[3]{d}$ 为整数的最大那个 $d$,其对应的 $\sqrt[3]{d}$ 就是最大的 $A$。但朴素枚举 $N$ 的所有约数的复杂度为 $O\left( \sqrt{N} \right)$,会超时。

  接着再想办法优化,注意到 $A^3 B = N \Rightarrow A = \sqrt[3]{N/B} \leq \sqrt[3]{10^{18}/1} = 10^6$,这说明我们其实只需要考虑 $10^6$ 以内的质因子,因为如果某个质因子大于 $10^6$,其 $3$ 次幂就会超过 $10^{18}$,与 $N \leq 10^{18}$ 矛盾。所以我们可以先筛出 $10^6$ 以内的所有质数(一共 $78498$ 个质数),然后依次枚举这些质数来试除 $N$,求出每个质因子的幂次,再套用最开始提到的公式计算出最大 $A$。然而处理单个 $N$ 的复杂度为 $\pi\left(\sqrt[3]{N}\right)$,所有询问的总复杂度为 $T \cdot \pi\left(\sqrt[3]{N}\right)$,还是会超时。

  实际上做到这里我也很难再想到更优的解法了,无奈下只能查看题解,结果发现只需考虑 $\sqrt[4]{N}$ 内的质因子就行。这个步骤的跳跃性很大,难以解释为什么。不过我们还是可以硬推一下其背后的逻辑。首先尝试 $\sqrt{N}$ 内的约数,发现不行再考虑 $\sqrt[3]{N}$ 内的质因子,还不行再试试 $\sqrt[4]{N}$ 的质因子。下面来分析一下为什么只需考虑 $\sqrt[4]{N}$ 的质因子。

  我们先枚举 $\sqrt[4]{N}$ 以内的质因子并试除 $N$,剩下的部分记为 $N'$,将其分解成 $N' = P_1^{\alpha_1} P_2^{\alpha_2} \cdots P_m^{\alpha_m}$,其中每个质因子都大于 $\sqrt[4]{N}$ 的,即 $P_i > \sqrt[4]{N}$。此时可以分两种情况讨论:

  • 如果 $m=1$,即 $N' = P_1^{\alpha_1}$ 只有一个质因子,那么一定有 $\alpha_1 \leq 3$。否则如果 $\alpha_1 \geq 4$ 则 $P_1^{\alpha_1} > \left(\sqrt[4]{N}\right)^4 > N$,矛盾。
  • 如果 $m > 1$,则每个 $\alpha_i < 3$。比如某个 $\alpha_i \geq 3$,有 $P_i^{\alpha_i} P_j^{\alpha_j} > \left(\sqrt[4]{N}\right)^3 \times \sqrt[4]{N} = N$,矛盾。

  此时,我们只需 $O(1)$ 判断 $\sqrt[3]{N'}$ 是否为整数,就可以确定 $N'$ 是否存在幂次为 $3$ 的唯一质因子。最终总的复杂度为 $T \cdot \pi\left(\sqrt[4]{N}\right)$,可以通过。

  AC 代码如下,时间复杂度为 $O\left(T \cdot \pi\left(\sqrt[4]{N}\right)\right)$:

#include <bits/stdc++.h>
using namespace std;typedef long long LL;const int N = 32005;int prime[N], cnt;
bool vis[N];void init() {for (int i = 2; i < N; i++) {if (!vis[i]) prime[cnt++] = i;for (int j = 0; prime[j] * i < N; j++) {vis[prime[j] * i] = true;if (i % prime[j] == 0) break;}}
}void solve() {LL n;cin >> n;LL ret = 1;for (int i = 0; i < cnt; i++) {int p = prime[i], c = 0;while (n % p == 0) {c++;n /= p;}c /= 3;while (c--) {ret *= p;}}LL t = cbrtl(n);if (t * t * t == n) ret *= t;cout << ret << '\n';
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);init();int t;cin >> t;while (t--) {solve();}return 0;
}

 

参考资料

  【题解】2020牛客寒假算法基础集训营第六场:https://ac.nowcoder.com/discuss/367149

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/972618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust环境搭建

步骤一:设置 Rustup 镜像, 修改配置~/.zshrcexport RUSTUP_DIST_SERVER="https://rsproxy.cn" export RUSTUP_UPDATE_ROOT="https://rsproxy.cn/rustup"步骤二:安装 Rust(请先完成步骤一的环…

Python json list as json and write in json file,tkinter popup as messagebox

import uuid import datetime import time import json import tkinter as tk import tkinter.messagebox as msgBoxclass Book():def __init__(self,id,name,isbn,comment,content,summary,title,topic):self.id=idse…

Trick——树

Part1 问题:统计一条根链上的点权值出现次数。 首先不难想到对根链建立主席树,可以做到 \(O(nlogn)-O(logn)\) 的优秀复杂度。 码量有些大,但它是在线算法。 离线算法 我们这样考虑: 若知道 \(x\) 的根链的点权集合…

windows的句柄和linux的fd对比

以下是不严谨的对比表格:特性 Linux 文件描述符 (FD) Windows 句柄 (Handle)资源覆盖范围 主要集中在 I/O 相关资源。(文件、目录、设备、管道、套接字等) 覆盖所有内核对象。(I/O 资源 + 进程、线程、同步对象、内…

20251117~20251123NOIP模拟赛

20251117NOIP模拟赛 A: 题目大意: 有 \(n\) 个点,每个点有 \(a_{i}\) 个孔,你现在要在这 \(n\) 个点中连 \(n - 1\) 条边,使得他们联通。 每条边连接两个孔,每个孔最多连接 \(1\) 条边,两种连接方案相同,当且仅…

谁又不是一边破碎一边前行

谁又不是一边破碎一边前行太厉害了语文考试,一句看起来如此简单的话居然能扯出这么多的内涵。 突然联想到考试的经历,或许也是一边破碎一边前行。下午考数学的时候不知道为啥心情非常烦躁,最后两分钟极限发现一个弱…

Java的第一个程序

HelloWorld 1.随便新建一个文件夹,存放代码 2.新建一个Java文件 文件后缀名为.java Hello.java 【注意点】系统可能没有显示文件后缀名,我们需要手动打开 3.编写代码 public class Hello{public static main(String[…

题解:qoj14419 Maximum Segment Sum

清新小巧题! 题意:给出一个数 \(n\),求对于所有 \(k=[0,n]\),满足由 \(-1,1\) 构成的 \(n\) 长序列的最大子段和等于 \(k\) 的个数。 做法: 首先肯定考虑把答案改为算 \(\le k\) 的个数再差分得到答案。 考虑怎么…

20232310 2025-2026-1 《网络与系统攻防技术》实验七实验报告

1.实验内容及要求 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法。具体实践有 (1)简单应用SET工具建立冒名网站 (2)ettercap DNS spoof (3)结合应用两种技术,用DNS spoof引导特…

完整教程:基于Python楼王争霸劳动竞赛数据处理分析

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

46

所学时间:9小时 博客量啊 代码量:几百 所学知识:ai儿童作文生成器

【springboot线上零食舱系统】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

html导出pdf

index.vue <template><div class="app"><el-button type="primary" size="small" @click="exportPDF">导出pdf</el-button><h1>导出PDF进度:…

【第7章 I/O编程与异常】为什么句柄看起来像指针却不是指针?

这是一个极佳的问题,触及了操作系统设计中抽象、兼容性与安全的核心权衡。 “句柄看起来像指针却不是指针”这一现象,本质上是 Windows API 在类型系统上的“善意伪装”,背后有深刻的历史和工程原因。🔍 一、为什…

SQL 基础语法

SQL 基础语法 在我们用 docker run --name ctf-mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql:5.7 命令创建了 ctf-mysql 容器后,使用 start ctf-mysql 打开容器,用 docker exec -it ctf-mysql mysql -u…

实用指南:暖手宝方案开发,暖手宝MCU控制方案开发设计

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

博客发文公示

文章会优先在我的个人博客https://penetr4t10n.top更新,偶尔或者不一定同步到博客园,如果想第一时间获取文章,请浏览我的个人博客,谢谢

2025年【口碑好的/比较好的/靠谱的】水密门【公司/工厂/厂家】推荐/排行榜 哪家好/强/靠谱

2025年【口碑好的/比较好的/靠谱的】水密门【公司/工厂/厂家】推荐/排行榜 哪家好/强/靠谱 比较好的/靠谱的/可靠的铝合金水密门/不锈钢水密门/船用铰链液压水密门/船用钢质水密门/船用耐压水密门/船用液压水密门/船用…

NVM 与 单节点下PM2进程守护 安装配置以及使用教程完整指南(含 Node.js 环境搭建)

NVM 与 单节点下PM2进程守护 安装配置以及使用教程完整指南(含 Node.js 环境搭建)该文档聚焦 NVM 与 PM2 的实用配置,旨在帮助用户高效管理 Node.js 环境与应用进程。内容上,先解决 NVM 安装的网络问题与环境变量配…