相遇
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给定函数 f(n) 表达式如下,

f(n)=\begin{cases}0,&n=0,1,2\\f(n-2^{\left\lfloor\log_2(n-1)\right\rfloor}-1)+2^{\left\lfloor\log_2(n-1)\right\rfloor-1},&n\geqslant 3\end{cases}

其中 \left\lfloor x\right\rfloor 表示对 x 向下取整的结果,例如:\left\lfloor 2.80735\right\rfloor=2,\left\lfloor 5\right\rfloor=5

请问给定正整数 x,请判断是否存在正整数 m 使得 f(m)=x,如果存在输出 Yes,否则输出 No。

输入描述:

一行一个正整数 x1\leqslant x\leqslant 10^{14}

输出描述:

仅一行如果存在输出 Yes,否则输出 No。
示例1

输入

复制
4

输出

复制
Yes

说明

f(9)=f(0)+4=4
示例2

输入

复制
7

输出

复制
No

说明

可以证明不存在正整数 m 使得 f(m)=7

备注:

注:如果你把握不住浮点数误差分析,可以使用函数 g(n)=2^{\left\lfloor\log_2(n-1)\right\rfloor},实现如下:

C/C++:

long long g(long long n)
{//It needs n>=3.
    n--;
    int res=0;
    while(n!=1)res++,n/=2;
    return 1ll<<res;
}

Python:

def g(n:int):
    #It needs n>=3.
    n-=1
    res=0
    while n!=1:res+=1;n>>=1
    return 1<<res


Java:
public static long g(long n)
{
    // It needs n>=3.
    n--;
    int res=0;
    while(n!=1){res++;n=n>>1;}
    return 1L<<res;
}