#include #include #include #include #include #define REP(i, a, b) for (int i = int(a); i < int(b); i++) #define dump(val) cerr << __LINE__ << ":\t" << #val << " = " << (val) << endl using namespace std; typedef long long int lli; template vector make_v(size_t a, T b) { return vector(a, b); } template auto make_v(size_t a, Ts... ts) { return vector(a, make_v(ts...)); } int main() { lli N; cin >> N; vector isPrime(static_cast(sqrt(N)) + 2, true); isPrime[0] = isPrime[1] = false; vector Prime; for (lli i = 1; i * i <= N; i++) { if (isPrime[i]) { Prime.push_back(i); if (i * i == N) { cout << "NO" << endl; return 0; } for (lli j = i * 2; j * j <= N; j += i) { isPrime[j] = false; } } } int cnt = 1; lli n = N; REP(i, 0, Prime.size()) { while (n % Prime[i] == 0) { n /= Prime[i]; cnt++; } } cout << (cnt >= 3 ? "YES" : "NO") << endl; return 0; }