利用递归完成将一个正整数分解成若干个>1的正整数之积 c++
时间: 2024-09-29 10:09:42 浏览: 52
在C++中,我们可以利用递归来实现将一个正整数分解为大于1的正整数之积。这里是一个简单的例子,使用一个函数`factorize`来完成这个任务:
```cpp
#include <iostream>
#include <vector>
// 函数用于递归分解数字
std::vector<int> factorize(int n) {
if (n == 1) { // 基本情况,1本身就是质因数分解的结果
return {};
} else if (n % 2 == 0) { // 如果n能被2整除
std::vector<int> result = factorize(n / 2);
result.push_back(2); // 添加2到结果
return result;
} else { // 遇到奇数,从3开始尝试找到所有因子
for (int i = 3; i * i <= n; i += 2) { // 只检查奇数因子
while (n % i == 0) {
std::vector<int> result = factorize(n / i);
result.push_back(i); // 将因子添加到结果
n /= i; // 更新n为去除因子后的值
}
}
if (n > 2) { // 如果n还有剩余,说明它是最后一个因子
std::vector<int> result = factorize(n);
result.push_back(n); // 添加n到结果
}
return result;
}
}
int main() {
int num;
std::cout << "请输入一个正整数: ";
std::cin >> num;
std::vector<int> factors = factorize(num);
if (factors.empty()) {
std::cout << "1 是唯一的因子。\n";
} else {
std::cout << "数字 " << num << " 的因子分解为: ";
for (int i : factors) {
std::cout << i << " ";
}
std::cout << "\n";
}
return 0;
}
```
在这个程序中,`factorize`函数会不断检查输入的数字是否可以被2或更大的奇数整除,并递归地处理较小的因子。当数字只剩下一个或1个因子(它自身),则结束递归。
阅读全文