Codeforces Round #102 (Div. 1) A : Help Farmer

問題概要

ある正整数A,B,Cがあり、(A-1)*(B-2)*(C-2)の値が与えられる。A*B*Cの値として考えられる最小値と最大値を求める問題。

解法

全探索する。

acceptされたコード

#include <iostream>
using namespace std;

typedef long long int64;

const int64 INF = 1LL<<62;

int64 N;

void init(){
	cin >> N;
}

void solve(){
	int64 mini = INF, maxi = -INF;

	for(int64 i=1; i*i <= N; i++)if(N%i==0){
		for(int k=0; k<2; k++){
			int64 A = (k==0 ? i : N/i);
			int64 M = N/A;
			for(int64 j=1; j*j <= M; j++)if(M%j==0){
				int64 val = (A+1) * (j+2) * (M/j+2) - N;
				if(val >= 0){
					mini = min(mini, val);
					maxi = max(maxi, val);
				}
			}
		}
	}

	cout << mini << " " << maxi << endl;
}

int main(){
	init();
	solve();
	return 0;
}