题目描述 输入一个整数 n,请将其分解为若干个质数相乘的形式,并从小到大输出那些质数。 输入格式 一个数 n。 输出格式 输出一行,为空格隔开的若干个质数,你需要保证这些质数每一个都不小于前面的,并且这些质数的乘积为 n。
时间: 2024-12-27 16:31:46 浏览: 3
这是一个经典的算法问题,通常称为"因式分解"或"素数分解"。给定一个正整数n,我们需要找到所有可以组成该数的最小质因子序列,并按照升序排列。解决这个问题的方法包括使用循环遍历较大的质数并尝试除以它们,直到n变为1或者找不到能整除的质数为止。
以下是用C++实现的一个简单解决方案:
```cpp
#include <iostream>
#include <vector>
bool isPrime(int num) {
if (num <= 1) return false;
for (int i = 2; i * i <= num; ++i) {
if (num % i == 0) return false;
}
return true;
}
std::vector<int> primeFactorization(int n) {
std::vector<int> factors;
for (int i = 2; i * i <= n; ++i) { // Start from 2, the smallest prime
while (n % i == 0 && isPrime(i)) {
factors.push_back(i);
n /= i;
}
}
if (n > 1) factors.push_back(n); // If there's a remaining factor greater than sqrt(n), it must be prime
return factors;
}
void printFactors(const std::vector<int>& factors) {
std::cout << "The prime factors of " << factors[0];
for (size_t i = 1; i < factors.size(); ++i) {
std::cout << " * " << factors[i];
}
std::cout << " = " << factors[0] * factors[factors.size() - 1] << "\n";
}
int main() {
int n;
std::cin >> n;
std::vector<int> factors = primeFactorization(n);
printFactors(factors);
return 0;
}
```
阅读全文