#include #define fi first #define se second #define pb push_back #define sz(a) (int)a.size() #define all(a) a.begin(),a.end() #define rep(i,n) for(int i=0;i=0;i--) #define vec(...) vector<__VA_ARGS__> #define _30Vyddk ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0) using namespace std; typedef long long ll; typedef long double ld; using pii=pair; using vi=vector; int main(){ _30Vyddk; ll x,y,a,b; cin>>x>>a>>y>>b; ll n=x,m=y; vec(pair) _a,_b; for(int i=2;i<=sqrt(n);i++){ ll cnt=0; while(n%i==0){ cnt++; n/=i; } if(cnt) _a.pb({cnt,i}); } if(n>1) _a.pb({1,n}); for(int i=2;i<=sqrt(m);i++){ ll cnt=0; while(m%i==0){ cnt++; m/=i; } if(cnt) _b.pb({cnt,i}); } if(m>1) _b.pb({1,m}); rep(i,sz(_a)){ _a[i].fi=_a[i].fi*a; } std::map mp; rep(i,sz(_b)){ _b[i].fi=_b[i].fi*b; mp[_b[i].se]=_b[i].fi; } bool pokita=1; std::map mp1; rep(i,sz(_a)){ ll x=_a[i].se; mp1[x]=1; if(mp[x]>_a[i].fi){ pokita=0; } } rep(i,sz(_b)){ if(mp1.find(_b[i].se)==mp1.end()) pokita=0; } if(pokita){ cout<<"Yes\n"; }else{ cout<<"No\n"; } // return 0; }