#define _USE_MATH_DEFINES #pragma region include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //// //#include // #pragma endregion //#include ///////// #pragma region typedef typedef long long LL; typedef long double LD; typedef unsigned long long ULL; #pragma endregion //typedef ////定数 const int INF = (int)1e9; const LL MOD = (LL)1e9+7; const LL LINF = (LL)4e18+20; const LD PI = acos(-1.0); const double EPS = 1e-9; ///////// using namespace::std; bool inside(LL ter,LL N,LL base){ if( base == 0 ){ return true; } LL L,R; LL baseL,baseR; L = N; R = N; baseL = base; baseR = base; while(L <= ter && R>=0 && L>=0){ if( L <= ter && ter <= R ){ return true; } baseL *= 2; L += baseL; baseR = baseR*2+1; R += baseR; } return false; } LL N; set memo; bool dfs(LL S,LL T){ if( memo.find(T) != memo.end() ){ return false; } memo.insert( T ); if( S==N ){ return true; } if( S > N ){ return false; } if( S+T > N ){ return false; } if( inside(N,S,T) == false ){ return false; } T<<=1; bool res; LL T1 = T+1; res = dfs(S+T1,T1); if( res == true ){ return true; } LL T2 = T; res = dfs(S+T2,T2); if( res == true ){ return true; } return false; } void solve(){ cin>>N; bool ans = dfs(0,0); if(ans){ cout<<"YES" << endl; }else{ cout<<"NO" << endl; } } #pragma region main signed main(void){ std::cin.tie(0); std::ios::sync_with_stdio(false); std::cout << std::fixed;//小数を10進数表示 cout << setprecision(16);//小数点以下の桁数を指定//coutとcerrで別 solve(); } #pragma endregion //main()