#pragma GCC diagnostic ignored "-Wunused-variable" #include //#include using namespace std; //using namespace atcoder; #define BOOST #ifdef BOOST #include #include using namespace boost; using ml = multiprecision::cpp_int; using md = multiprecision::cpp_dec_float_100; #endif /***** type *****/ using ll = long long; using ld = long double; using pll = pair; template using vt = vector; template using vvt = vector>; template using vvvt = vector>>; /***** define *****/ #define all(c) (c).begin(), (c).end() // begin to end #define coutld cout << fixed << setprecision(10) // cout double #define output(x) do { cout << x << endl; exit(0); } while(0) #define rep(i, b, e) for (ll i = b; i < e; i++) // repeat #define repr(i, b, e) for (ll i = b; e < i; i--) // repeat reverse #define fori(i, ...) if (ll i = -1) for(__VA_ARGS__) if (i++, 1) #define each(i, e, c) fori (i, auto&& e: c) // for each /***** const value *****/ #define llong_max 9223372036854775807 // 9 * 10^18 #define ldbl_max 1.79769e+308 // 1.7 * 10^308 #define pi 3.1415926535897932 // 3.14 ... /***** lambda *****/ auto Ceil = [] // if (a % b != 0) return a / b + 1; (auto x) { return (ll)ceil(x); }; auto Count = [] // long long count value (auto b, auto e, auto x) { return (ll)count(b, e, x); }; auto CtoL = [] // char to number (auto c) { return (ll)c - (ll)'0'; }; auto LtoC = [] // number to char (auto n) { return (char)('0' + n); }; auto Pow = [] // long long pow (auto a, auto b) { return (ll)pow(a, b); }; auto Pow2 = [] // long long pow2 (auto n) { return (1LL << n); }; auto Pow10 = [] // long long pow10 (auto n) { return (ll)pow(10, n); }; auto Size = [] // long long collection size (auto& c) { return (ll)(c).size(); }; auto Sum = [] // long long accumulate (auto b, auto e) { return accumulate(b, e, 0LL); }; /***** operator *****/ template pair operator + (pair l, pair r) { // pair + pair return { l.first + r.first, l.second + r.second }; } template pair operator - (pair l, pair r) { // pair - pair return { l.first - r.first, l.second - r.second }; } /***** template *****/ template void MakeVVT (ll ys, ll xs, vvt& v, T fill = T()) { // vector> resize + fill v.resize(ys); rep(y, 0, ys) v[y].resize(xs, fill); } template void MakeVVVT (ll zs, ll ys, ll xs, vvvt& v, T fill = T()) { // vector>> resize + fill v.resize(zs); rep(z, 0, zs) MakeVVT(ys, xs, v[z], fill); } template void InputVVT (ll ys, ll xs, vvt& v, T fix = T()) { // input vector> (T != struct) + fix MakeVVT(ys, xs, v, fix); rep(y, 0, ys) rep(x, 0, xs) { cin >> v[y][x]; v[y][x] += fix; } } template void InputVVVT (ll zs, ll ys, ll xs, vvvt& v, T fix = T()) { // input vector>> (T != struct) + fix v.resize(zs); rep(z, 0, zs) InputVVT(ys, xs, v[z], fix); } /**************************************/ /********** BEGIN OF NYA LIB **********/ /**************************************/ namespace NyaGadget {} namespace NyaGadget { /***** 素因数分解ライブラリ *****/ struct NT_PrimeFactorization { // 結果を格納する変数 std::map res; /** * @note * 計算量O(√N)でNを素因数分解する。 * ans[p]がmだったとき、素因数分解して得られた積のなかにm個の素数pが含まれていることを表す。 * 例えば n=12 のとき ans[2]=2、ans[3]=1 となるので 12=2×2×3 と分かる。 **/ decltype(res)& Run(long long N) { for (auto i = 2LL; i * i <= N; i++) { while (N % i == 0) res[i]++, N /= i; } if (N != 1) res[N]++; return res; } /** * @note * Nに含まれる因数xの個数を返す。計算量O(log N) * 例えば n=45、x=3 なら 45=3×3×5 で因数3の個数2を返す。 **/ long long Run(long long N, long long x) { long long ans = 0; while (N % x == 0) ans++, N /= x; return ans; } }; } /**************************************/ /*********** END OF NYA LIB ***********/ /**************************************/ using namespace NyaGadget; //using mll = NT_ModLL< 1000000007 >; //using mll = NT_ModLL< 998244353 >; int main(void) { ll a, b; cin >> a >> b; NT_PrimeFactorization pf; auto res = pf.Run(b / gcd(a,b)); each(i, e, res) if (e.first != 2 && e.first != 5) output("Yes"); cout << "No" << endl; return 0; }