问题描述
设n是一个正整数,现在要求将n分解为若干互不相同的自然数的和,且使这些自然数的乘积最大。
输入格式
由文件提供输入数据,文件的第一行是正整数n。
输出格式
将计算的最大乘积输出。
输入样例
10
输出样例
30
#include <bits/stdc++.h>
using namespace std;
int main()
{
freopen("zyfj.txt","r",stdin);
int n;
cin>>n; //n=a+(n-a) m=a*(n-a) 2<=a<=n-2
int *arr=new int[n]; //因为n<4时,分解的乘积较小 n>=4时,n=n+(n-1)的乘积也小于n
int te=2; //因数
int nn=n; //临时变量
int i=0;
while(nn>=te) //nn剩余的数大小是否足够继续分解
{
arr[i++]=te;
//sum*=te;
nn-=te;
te++; //2 3 4 5...
}
int num=i; //分解的数的个数。分解为i个数,从下标为0开始
while(nn>=1) //分配多余的数
{
arr[(--i)%num]++;
nn--;
}
int sum=1;
for(int i=0;i<num;i++)
sum*=arr[i];
cout<<sum;
}