C.ヘルプファーマーは、
質問の意味を簡略化する:既知A B N所与C = Nは、解決
[(+ 2)*( B + 2)*(C + 1) の最大値と最小値\] \
説明:暴力は、最小値を求めるために、A、B、Cを列挙します。
デフォルト
\ [最大値= 3 * 3 *(N + 1)\]
#include <cstdio>
#include <queue>
using namespace std;
typedef long long ll;
ll min(ll a,ll b){
return a<b?a:b;
}
ll max(ll a,ll b){
return a>b?a:b;
}
int main(){
ll N;
scanf("%lld",&N);
ll minn=3*3*(N+1);
for(ll a=1;a<=100000;a++){
if(N%a==0)
for(ll b=1;b<=10000;b++){
if(N%(a*b)==0){
ll c=N/a/b;
minn=min(minn,(min(min(a,b),c)+1)*(max(max(a,b),c)+2)*
(a+b+c-min(min(a,b),c)-max(max(a,b),c)+2));
}
}
}
printf("%lld",minn-N);
printf(" %lld\n",3*3*(N+1)-N);
return 0;
}