fn calc(t: usize) -> usize { let mut s = 0usize; let mut t = t; while t > 0 { s += t; t /= 2; } 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 = 1e9 as usize; while upper > lower { let middle = (upper + lower) / 2; let val = calc(middle); if val == n { println!("YES"); return; } else if val > n { upper = middle; } else { lower = middle+1; } } if calc(upper) == n { println!("YES"); } else { println!("NO"); } }