結果

問題 No.368 LCM of K-products
ユーザー shora_kujira16shora_kujira16
提出日時 2016-04-29 23:20:38
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
TLE  
実行時間 -
コード長 1,352 bytes
コンパイル時間 2,318 ms
コンパイル使用メモリ 189,176 KB
実行使用メモリ 16,840 KB
最終ジャッジ日時 2024-10-04 18:59:26
合計ジャッジ時間 8,593 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

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

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define REP(i,n) for(int i = 0; i < (int)(n); ++i)
#define DEBUG(x) cerr << #x << " = " << x << endl

constexpr int MOD = 1000000007;

int pow_mod(int x, int y) {
  int res = 1;
  for(; y > 0; y >>= 1, (x *= x) %= MOD) {
    if(y & 1) (res *= x) %= MOD;
  }
  return res;
}

template<class T, class U>
U get_or_else(const std::map<T, U> m, const T key, const U def) {
  auto it = m.find(key);
  if(it == m.end()) {
    return def;
  }
  else {
    return it->second;
  }
}

signed main() {
  int N, K; cin >> N >> K;
  vector<int> A(N);
  REP(i,N) cin >> A[i];
  vector<map<int, int>> factors(N);
  vector<int> allfactors;
  REP(i,N) {
    int num = A[i];
    while(num > 1) {
      for(int k = 2; k <= num; ++k) {
        if(num % k == 0) {
          factors[i][k]++;
          allfactors.push_back(k);
          num /= k;
          break;
        }
      }
    }
  }
  sort(allfactors.begin(), allfactors.end());
  allfactors.erase(unique(allfactors.begin(), allfactors.end()), allfactors.end());
  int ans = 1;
  for(int fact : allfactors) {
    vector<int> cnt;
    REP(i,N) {
      cnt.push_back(get_or_else(factors[i], fact, 0LL));
    }
    sort(cnt.rbegin(), cnt.rend());
    REP(j,K) {
      ans *= pow_mod(fact, cnt[j]);
      ans %= MOD;
    }
  }
  cout << ans << endl;
}
0