酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

连续整数乘积求解:C++实现与效率优化分析

✅ **问题分析** 题目要求:找出所有 **≤ n** 的正整数,且这些数可以表示为 **两个连续正整数的乘积**,即形式为: ``` k × (k + 1) ``` 其中 `k` 为**正整数**。 例如: - 1 × 2 = 2 - 2 × 3 = 6 - 3 × 4 = 12 - 4 × 5 = 20 - ... 注意:题目要求输出这些**乘积结果**,而不是 `k` 本身。 --- 🚀 **解题思路** 我们只需要枚举 `k` 从 1 开始,计算 `k * (k + 1)`,当结果 **> n** 时停止循环即可。 因为 `n ≤ 10^6`,所以 `k` 最多到大约 `sqrt(10^6) ≈ 1000`,完全可以在 O(√n) 时间内完成,效率非常高。 --- 🛠 **C++ 实现代码** ```cpp #include <iostream> using namespace std; int main() { int n; cin >> n; for (int k = 1; ; k++) { long long product = 1LL * k * (k + 1); // 防止溢出 if (product > n) break; // 超出范围,终止 cout << product << endl; // 输出满足条件的数 } return 0; } ``` --- 📌 **关键点说明** | 要点 | 说明 | |------|------| | **循环条件** | 使用 `while(true)` 或 `for(;;)`,当乘积 > n 时 `break` | | **防止溢出** | 使用 `1LL * k * (k+1)` 将乘法转换为 `long long`,避免 `int` 溢出 | | **输出格式** | 每个数占一行,默认从小到大(因为k递增) | | **时间复杂度** | O(√n),n=10^6 时最多约 1000 次循环,非常快 | --- 🧪 **示例测试** 输入: ``` 10 ``` 输出: ``` 2 6 ``` 解释:2 = 1×2,6 = 2×3,12 > 10所以停止。 输入: ``` 30 ``` 输出: ``` 2 6 12 20 30 ``` --- ⚠️ **常见陷阱与优化建议** - **注意数据类型**:`k` 最大约 1000,但乘积可能超过 `int` 最大值(约 21 亿),所以必须用 `long long`。 - **边界情况**:当 `n=1` 时,最小乘积是 2,所以输出为空。 - **不要输出 `k`**:要输出的是 `k*(k+1)` 的结果,而不是 `k` 本身。 --- 💡 **扩展思考** 这个题目本质上是**求 n 以内所有形如 k(k+1) 的数的集合**,可以推广到更一般的**任意两个连续整数乘积**问题。未来若遇到更大 n(比如 10^12),可以采用**二分查找**或**数学公式**优化,但当前范围直接枚举即可。 --- ######[AI写代码神器 | 714点数解答 | 2026-08-28 20:44:51]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]