整数 N! 分解质因数:算法详解与 C++ 代码实现
问题分析 需要将 N! 分解质因数,并按质因数从小到大的顺序输出每个质因数的指数。 核心思路 N! 的质因数分解中,质数 p 的指数计算公式为: \[ e_p = \left\lfloor \frac{N}{p} \right\rfloor + \left\lfloor \frac{N}{p^2} \right\rfloor + \left\lfloor \frac{N}{p^3} \right\rfloor + \cdots \] 直到 \( p^k > N \)。 算法步骤 1. 使用筛法生成不超过 N 的所有质数。 2. 对每个质数 p,计算其在 N! 中的指数。 3. 按顺序输出 p 和对应的指数(指数大于 0 才输出)。 代码实现(C++) ```cpp #include <iostream> #include <vector> using namespace std; // 筛法生成质数表 vector<int> getPrimes(int n) { vector<bool> isPrime(n + 1, true); vector<int> primes; for (int i = 2; i <= n; ++i) { if (isPrime[i]) { primes.push_back(i); for (int j = i * i; j <= n; j += i) { isPrime[j] = false; } } } return primes; } int main() { int N; cin >> N; vector<int> primes = getPrimes(N); for (int p : primes) { int count = 0; long long power = p; // 防止溢出 while (power <= N) { count += N / power; power *= p; } if (count > 0) { cout << p << " " << count << endl; } } return 0; } ``` 样例验证 输入: ``` 5 ``` 输出: ``` 2 3 3 1 5 1 ``` 与题目样例一致。 复杂度分析 - 时间复杂度:\( O(N \log \log N + \pi(N) \log N) \),其中 \(\pi(N)\) 是小于等于 N 的质数个数。 - 空间复杂度:\( O(N) \)。 ######[AI问答 | 504点数解答 | 2026-01-12 17:42:36]
- 判断超级幸运数:满足“纯4/7数位”或“4/7总个数为4或7”的整数计数(阿里通义 | 965点数解答 | 2026-03-13 12:15:06)32
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)352
- 深度揭秘 Oracle Workarea Size Policy:参数调优助力数据库性能飞升(阿里通义 | 372点数解答 | 2024-05-13 10:54:45)236
- 2031 题:C++ 实现自然数素数拆分及质因数分解注意事项(字节豆包 | 352点数解答 | 2025-09-13 16:29:52)88
- 巧用筛法!计算 N 到 M 间数的最大质因数个数(DeepSeek | 245点数解答 | 2026-01-18 12:43:51)41
- C 语言:按特定顺序读入并输出浮点数、整数和字符(字节豆包 | 106点数解答 | 2024-09-26 00:32:40)320
- C语言:按序读入浮点数、整数、字符并按新顺序输出,附代码实现 (字节豆包 | 108点数解答 | 2024-09-30 22:54:08)335
- C语言:按特定顺序读入并输出浮点数、整数和字符,精确控制小数位(字节豆包 | 155点数解答 | 2024-10-08 22:06:18)329
- C++与Python:按特定顺序输入输出数据并保留浮点数两位小数的实现(字节豆包 | 168点数解答 | 2024-10-08 22:07:03)336
- C语言:按特定顺序读入再输出,含浮点数精确格式处理(字节豆包 | 105点数解答 | 2024-10-08 22:07:29)344
- C++ 混合类型数据格式化输入输出:按指定顺序输出并保留两位小数(字节豆包 | 187点数解答 | 2024-10-16 14:31:08)390
- C语言:实现混合类型数据格式化输入输出,代码超简单!(字节豆包 | 159点数解答 | 2024-10-16 14:32:18)383