#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const ll mod = 1000000007; #define rep(i,n) for(int i=0;i=0;i--) #define all(x) (x).begin(),(x).end() int main() { ll N; cin >> N; if (N == 1) { cout << "NO" << endl; return 0; } map counts; for (ll i = 2; i * i <= N; i++) { //最大回数まで割るので、結果的に素数でしか割れない while (N % i == 0) { counts[i]++; N /= i; } } //素因数で合成数を作れるか確認 //素因数が1種類のみの場合 if (counts.size() == 1) { //1乗は、素数なのでNG //2乗は、1、素因数p、N(p^2)となるためNG //3乗は、1、素因数p、p^2、N(p^3)となるためOK for (auto c : counts) { if (c.second >= 3) { cout << "YES" << endl; return 0; } } } //素因数が複数種類ある時はOK cout << "OK" << endl; return 0; }