#include using namespace std; using ll = long long; using ld = long double; using ull = unsigned long long; using uint = unsigned; using pii = pair; using pll = pair; template using pq = priority_queue, greater>; const ll LINF=0x1fffffffffffffff; const ll MINF=0x7fffffffffff; const int INF=0x3fffffff; const int MOD=1000000007; const int MOD2=998244353; const ld EPS=1e-9; const ld PI=3.14159265358979323846; const ll dx[] = {0, 1, 0, -1, 1, -1, 1, -1}; const ll dy[] = {1, 0, -1, 0, 1, 1, -1, -1}; #define all(x) (x).begin(), (x).end() #define pb push_back #define eb emplace_back #define mp make_pair #define fi first #define se second #define rep(i, n) rep2(i, 0, n) #define rep2(i, m, n) for (int i = m; i < (n); i++) #define per(i, b) per2(i, 0, b) #define per2(i, a, b) for (int i = int(b) - 1; i >= int(a); i--) #define ALL(c) (c).begin(), (c).end() #define SZ(x) ((int)(x).size()) #define nep(x) next_permutation(ALL(x)) template using V = vector; template using VV = V>; template using VVV = V>; template using VVVV = V>; template using V_p = V>; template using n_pq = priority_queue; template using r_pq = priority_queue,greater>; template ostream &operator<<(ostream &o,const vector&v) {o<<"{";for(int i=0;i<(int)v.size();i++)o<<(i>0?", ":"")<ostream &operator<<(ostream &o,const deque&v) {o<<"{";for(int i=0;i<(int)v.size();i++)o<<(i>0?", ":"")<ostream &operator<<(ostream &o,const set&v) {o<<"{";for(auto i:v)o<<" "< 0) { if (n & 1) ret *= x; // n の最下位bitが 1 ならば x^(2^i) をかける x *= x; n >>= 1; // n を1bit 左にずらす } return ret; } ll prime_factorize(long long N) { // 答えを表す可変長配列 vector > res; ll ret = 1; // √N まで試し割っていく for (long long p = 2; p * p <= N; ++p) { // N が p で割り切れないならばスキップ if (N % p != 0) { continue; } // N の素因数 p に対する指数を求める int e = 0; while (N % p == 0) { // 指数を 1 増やす ++e; // N を p で割る N /= p; } ll tmp = 1; rep(i,e+1) { tmp *= p; } ret *= (tmp-1) / (p-1); } // 素数が最後に残ることがありうる if (N != 1) { ret *= (N+1); } return ret; } int main() { ll N; cin >> N; const ll ans = prime_factorize(N); if (ans == 2*N) { cout << "Yes" << endl; } else { cout << "No" << endl; } }