fn main() { let (n, z): (usize, i32) = { let mut buf = String::new(); std::io::stdin().read_line(&mut buf).unwrap(); let mut iter = buf.split_whitespace(); ( iter.next().unwrap().parse().unwrap(), iter.next().unwrap().parse().unwrap(), ) }; let pow = |mut a: i32, mut n: usize| -> i32 { let mut res = 1; while n > 0 { if n & 1 > 0 { res = res * a; } a = a * a; n >>= 1; } res }; if z == 1 { return println!("No"); } let zn = pow(z, n); for x in 1.. { let xn = pow(x, n); if xn > zn { break; } for y in 1.. { let yn = pow(y, n); if xn + yn == zn { return println!("Yes"); } if xn + yn > zn { break; } } } println!("No"); }