题解:洛谷 B4001 [GESP202406 一级] 立方数 本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。欢迎大家订阅我的专栏算法题解C与Python实现附上汇总贴算法竞赛备考冲刺必刷题C | 汇总【题目来源】洛谷B4001 [GESP202406 一级] 立方数 - 洛谷【题目描述】小杨有一个正整数n nn他想知道n nn是否是一个立方数。一个正整数n nn是立方数当且仅当存在一个正整数x xx满足x × x × x n x \times x \times x nx×x×xn。【输入】第一行包含一个正整数n nn。【输出】如果正整数n nn是一个立方数输出Yes否则输出No。【输入样例】8【输出样例】Yes【核心思想】问题分析给定正整数n nn判断是否存在正整数x xx使得x 3 n x^3 nx3n。这是一个立方数判定问题核心在于通过枚举或数学方法验证n nn是否为完全立方数。算法选择枚举验证遍历i ii从1 11到n nn检查是否存在i 3 n i^3 ni3n提前终止一旦找到满足条件的i ii立即退出循环关键步骤读入数据读取n nn枚举验证i ii从1 11到n nn若i × i × i n i \times i \times i ni×i×inf l ← 1 fl \leftarrow 1fl←1b r e a k breakbreak若i × i × i n i \times i \times i ni×i×in可提前终止优化输出结果若f l 1 fl 1fl1输出Yes否则输出No时间/空间复杂度时间复杂度O ( n 3 ) O(\sqrt[3]{n})O(3n​)实际只需枚举到n 1 / 3 n^{1/3}n1/3超过时i 3 n i^3 ni3n空间复杂度O ( 1 ) O(1)O(1)枚举验证的核心思想立方根上界由于i 3 i^3i3增长迅速当i n 3 i \sqrt[3]{n}i3n​时必有i 3 n i^3 ni3n因此枚举范围实际为[ 1 , ⌊ n 1 / 3 ⌋ ] [1, \lfloor n^{1/3} \rfloor][1,⌊n1/3⌋]远小于n nn提前终止优化找到满足条件的i ii后立即b r e a k breakbreak避免不必要的后续枚举若i 3 n i^3 ni3n也可提前终止整数溢出的潜在风险当n nn较大时i × i × i i \times i \times ii×i×i可能溢出int范围应使用long long或提前判断i I N T _ M A X 3 i \sqrt[3]{INT\_MAX}i3INT_MAX​适用于基础数论判定、幂次验证类入门问题【算法标签】#入门 #模拟【代码详解】#includebits/stdc.husingnamespacestd;intmain(){intn;// 输入的数字cinn;// 读取数字intfl0;// 标志变量0表示不是完全立方数1表示是// 遍历1到n检查是否有数的立方等于nfor(inti1;in;i){if(i*i*in){// 检查i的立方是否等于nfl1;// 找到完全立方数break;// 找到后立即退出循环}}// 根据标志变量输出结果if(fl)coutYesendl;// 是完全立方数elsecoutNoendl;// 不是完全立方数return0;}【运行结果】8 Yes