fn calc(operator: usize) -> usize { let op = format!("{:b}", operator).chars().map(|c| c as usize - '0' as usize).collect::>(); let mut s = 0usize; let mut t = 0usize; for &v in op.iter() { t *= 2; t += v; s += t; } s } fn main() { let mut n = String::new(); std::io::stdin().read_line(&mut n).ok(); let n: usize = n.trim().parse().unwrap(); if n == 0 { println!("YES"); return; } let mut lower = 0usize; let mut upper = 1usize << 30; while upper > lower { let middle = (upper + lower) / 2; let val = calc(middle); if val == n { println!("YES"); return; } if val < n { lower = middle + 1; } else { upper = middle; } } println!("NO"); }