Problem Description
一个正整数N(0<n<100),可以写成若干个正整数加数之和,如6可以写成
6=1+2+3;
6=2+2+2;
6=2+4;
6=3+3;
6=1+5;
……
其中有一种分解方式获得的加数的乘积是所有分解方式中最大的,比如上面分解中最大的乘积是3×3=9。
请你设计一种算法,对于任何一个输入的正整数,求出其各种分解中所得到的最大乘积。
Input
输入有多组,每组一行输入一个正整数。以0作为输入的结束。
Output
对应输入的数据,输出多行,输出所求最大分解乘积。 保证答案在64位整数以内 .
Sample Input
6 7 0
Sample Output
9 12
Tips:利用均值不等式,可以知道当每一个数都相等的时候,才具有最大值,所以实际上就是将这个数均分,
假设分为n份,那么它们的乘积就是(k/n)^n,其中k为这几个数的和。
利用导数知识,可以算出其极值点。
![](https://i-blog.csdnimg.cn/blog_migrate/de5467de7cc3492d31049e8521d7a104.png)
所以当分成尽量多最接近e的值也就是3的时后是最优的,当k%3=1的时候,要把最后的1和一个3合并成4是最优的。
注意用64位整数输出。
代码:
#include<bits/stdc++.h>
using namespace std;
long long int f(int x){
if(x<=4)
return x;
else
return f(x-3)*3;
}
int main()
{
long long int n;
while(cin>>n&&n){
cout<<f(n)<<endl;
}
}