結果

問題 No.2954 Calculation of Exponentiation
ユーザー ripityripity
提出日時 2024-11-08 22:29:27
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 3 ms / 2,000 ms
コード長 987 bytes
コンパイル時間 2,627 ms
コンパイル使用メモリ 211,672 KB
実行使用メモリ 5,248 KB
最終ジャッジ日時 2024-11-08 22:29:46
合計ジャッジ時間 3,550 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
5,248 KB
testcase_01 AC 2 ms
5,248 KB
testcase_02 AC 2 ms
5,248 KB
testcase_03 AC 3 ms
5,248 KB
testcase_04 AC 2 ms
5,248 KB
testcase_05 AC 2 ms
5,248 KB
testcase_06 AC 2 ms
5,248 KB
testcase_07 AC 2 ms
5,248 KB
testcase_08 AC 2 ms
5,248 KB
testcase_09 AC 2 ms
5,248 KB
testcase_10 AC 2 ms
5,248 KB
testcase_11 AC 2 ms
5,248 KB
testcase_12 AC 2 ms
5,248 KB
testcase_13 AC 2 ms
5,248 KB
testcase_14 AC 2 ms
5,248 KB
testcase_15 AC 2 ms
5,248 KB
testcase_16 AC 2 ms
5,248 KB
testcase_17 AC 2 ms
5,248 KB
testcase_18 AC 2 ms
5,248 KB
testcase_19 AC 2 ms
5,248 KB
testcase_20 AC 2 ms
5,248 KB
testcase_21 AC 2 ms
5,248 KB
testcase_22 AC 2 ms
5,248 KB
testcase_23 AC 2 ms
5,248 KB
testcase_24 AC 2 ms
5,248 KB
testcase_25 AC 2 ms
5,248 KB
testcase_26 AC 2 ms
5,248 KB
testcase_27 AC 2 ms
5,248 KB
testcase_28 AC 3 ms
5,248 KB
testcase_29 AC 2 ms
5,248 KB
testcase_30 AC 2 ms
5,248 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;

using ll = long long;

pair<ll, ll> num(string S) {
  const int L = S.size();
  const string lf = S.substr(0, L - 5);
  const string rg = S.substr(L - 4, 4);
  return make_pair(stoll(lf + rg), 10000);
}

map<ll, ll> fac(ll n) {
  map<ll, ll> ret;
  for(ll p = 2; p * p <= n; p++) {
    while(n % p == 0) {
      n /= p;
      ret[p]++;
    }
  }
  if(n > 1) ret[n]++;
  return ret;
}

int main() {
  string A, B;
  cin >> A >> B;
  auto [x, y] = num(A);
  auto [z, w] = num(B);
  if(x == 10000 || z == 0) {
    cout << "Yes" << endl;
  }
  else {
    if(z < 0) {
      swap(x, y);
      z = abs(z);
    }
    auto fx = fac(x);
    auto fy = fac(y);
    for(auto &[p, e] : fy) {
      fx[p] -= e;
      if(fx[p] < 0) {
        cout << "No" << endl;
        return 0;
      }
    }
    for(auto &[p, e] : fx) {
      e *= z;
      if(e % w != 0) {
        cout << "No" << endl;
        return 0;
      }
    }
    cout << "Yes" << endl;
  }
}
0