#include #include #include #include #include #include #include #include using namespace std; using ull = unsigned long long; using ll = long long; bool isPrime(ull num){ if (num <= 1) return false; else if (num == 2) return true; else if (num % 2 == 0) return false; for (int i = 3; i < num / i; i += 2){ if (num%i == 0) return false; } return true; } void PrimeFactorization(const ull number, vector& result){ result.clear(); ull t = number; if (number == 0){ return; } //2で割れるかチェック if ((t % 2) == 0){ ull n = 0; do{ n++; t /= 2; } while ((t % 2) == 0); for (int i = 0; i < n; i++){ result.push_back(2); } if (t == 1){ return; } } //3以上の奇数で割れるかチェック ull limit = (ull)sqrt((double)t); for (ull i = 3; i <= limit; i += 2){ if ((t % i) == 0){ ull n = 0; do{ n++; t /= i; } while ((t % i) == 0); for (int i = 0; i < n; i++){ result.push_back(i); } if (t == 1){ return; } limit = (ull)sqrt((double)t); } } //残った素数を追加 result.push_back(t); } int main(){ ull N; cin >> N; vector result; PrimeFactorization(N, result); ull a[3]; a[0] = 1; a[1] = 1; a[2] = 1; for (int i = 0; i < result.size(); i++){ a[i % 3] *= result.at(i); } cout << a[0] + a[1] + a[2] - 3 << " " << N - 1 << endl; return 0; }