最大乘积 - C++代码实现

题目描述

一个正整数可以表示为若干个互不相同的正整数之和,如 '6 = 1 + 5 = 2 + 4 = 1 + 2 + 3 = 6',有 4 种表示方法,这 4 种表示方法里,拆分出的数字的乘积分别为 5、8、6、6。 给出 n,求 n 的所有表示方案中,拆分出的数字的乘积最大的方案,按升序依次输出拆分出的数字。

输入格式

从标准输入读入数据。 输入一个正整数 n(n ≤ 10^6)。

输出格式

输出到标准输出。 按升序输出拆分出的数字。

样例 #1

样例输入 #1

6

样例输出 #1

2 4

样例 #2

样例输入 #2

100

样例输出 #2

2 3 5 6 7 8 9 10 11 12 13 14

C++ 代码

#include <iostream>
#include <vector>

using namespace std;

vector<int> maxProduct(int n) {
    vector<int> nums;
    for (int i = 2; i * i <= n; i++) {
        while (n % i == 0) {
            nums.push_back(i);
            n /= i;
        }
    }
    if (n > 1) {
        nums.push_back(n);
    }
    return nums;
}

int main() {
    int n;
    cin >> n;
    
    vector<int> result = maxProduct(n);
    
    for (int i = 0; i < result.size(); i++) {
        cout << result[i] << " ";
    }
    
    return 0;
}

代码解释

  • 代码使用循环从 2 开始,依次尝试将 n 分解为质因数。
  • 如果 n 能被 i 整除,则将 i 加入到 nums 数组中,并将 n 除以 i。
  • 循环结束后,如果 n 仍然大于 1,则将 n 加入到 nums 数组中。
  • 最后返回 nums 数组,即所有拆分出的数字。

注意

  • 代码只考虑了正整数的分解,负数和 0 的分解情况没有考虑。
  • 代码没有进行错误处理,例如输入的 n 不是正整数的情况。
最大乘积 - C++代码实现

原文地址: https://www.cveoy.top/t/topic/f3pV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录