fn calc(operator: usize) -> usize { let operator = format!("{:b}", operator).chars().map(|c| c as usize - '0' as usize).collect::>(); let mut s = 0usize; let mut t = 0usize; for &v in operator.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(); let mut lower = 0usize; let mut upper = n; 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; } } if calc(upper) == n { println!("YES"); } else { println!("NO"); } }