#include int main() { long long N; scanf("%lld", &N); long long N2; long long a,b,c; long long min = N-1; // aのループでN^(1/3)を超えたら // bのループではN^(1/3)以下の数しか現れない // つまりb,cのいずれかはN^(1/3)以下しかとらない // それはaのループでチェック済みである // ちなみに // 1から始めるのが重要っぽい // 2から初めて、はまってしまいました for (a=1; a*a*a<=N; a++) { if (N%a == 0) { N2 = N/a; for (b=1; b*b<=N2; b++) { if (N2%b == 0) { c = N2/b; if (min > (a+b+c-3)) min = a+b+c-3; } } } } printf("%lld %lld\n", min, N-1); return 0; }