use std::collections::HashMap; use std::io; fn main() { let v = input_nums(); let (x, a, y, b) = (v[0], v[1], v[2], v[3]); let xv = prime_factorization(x); let yv = prime_factorization(y); let x_hmp = get_pf_hashmap(&xv); let y_hmp = get_pf_hashmap(&yv); let mut result = true; for (k, v) in y_hmp { if k == 1 { result = true; break; } if !x_hmp.contains_key(&k) { result = false; break; } if x_hmp[&k] * a < v * b { result = false; break; } } println!("{}", if result { "Yes" } else { "No" }); } fn prime_factorization(mut num: u64) -> Vec { let mut v = Vec::new(); let mut div = 2; let max_div = if num >= 30 { (num as f64).sqrt() as u64 } else { num }; while div <= max_div { if num % div == 0 { v.push(div); num /= div; } else { div += 1; } } if v.len() == 0 { v.push(num); } v } fn get_pf_hashmap(pf_v: &Vec) -> HashMap { let mut hm = HashMap::new(); let mut count = 0; let mut cor = 2; for i in 0..pf_v.len() { if cor == pf_v[i] { count += 1; } else { if count != 0 { hm.insert(cor, count); } cor = pf_v[i]; count = 1; } if i == pf_v.len() - 1 { hm.insert(cor, count); } } hm } fn input_nums() -> Vec { let mut s = String::new(); io::stdin().read_line(&mut s).unwrap(); let mut v = Vec::new(); for n in s.split_whitespace() { v.push(n.parse().unwrap()); } v }