結果
問題 | No.368 LCM of K-products |
ユーザー |
![]() |
提出日時 | 2016-05-18 22:28:52 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 25 ms / 2,000 ms |
コード長 | 1,105 bytes |
コンパイル時間 | 1,597 ms |
コンパイル使用メモリ | 173,312 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-09-22 14:47:33 |
合計ジャッジ時間 | 2,938 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 35 |
ソースコード
#include <bits/stdc++.h> using namespace std; #define FOR(i,n) for(int i = 0; i < (n); i++) #define sz(c) ((int)c.size()) #define ten(n) ((int)1e##n) using ll = long long; //素数列挙 bool prime[1000001]; //10^6 vector<int> prs; void init_prime() { memset(prime, 1, sizeof(prime)); prime[0] = prime[1] = false; for (int i = 2; i < sizeof(prime); i++) if (prime[i]) for (int j = i * 2; j < sizeof(prime); j += i) prime[j] = false; for (int i = 2; i < sizeof(prime); i++) if (prime[i]) prs.push_back(i); } int a[1000]; int main() { int n, k; cin >> n >> k; FOR(i, n) cin >> a[i]; init_prime(); map<int, vector<int>> mp; FOR(i, n) { int x = a[i]; for (auto p : prs) { if (p * p > x) break; int cnt = 0; while (x % p == 0) { x /= p; cnt++; } if (cnt) mp[p].push_back(cnt); } if (x > 1) mp[x].push_back(1); } const int MOD = ten(9) + 7; ll ans = 1; for (auto& kv : mp) { auto& v = kv.second; sort(v.rbegin(), v.rend()); int loop = min(k, sz(v)); FOR(i, loop) { FOR(_, v[i]) ans = ans * kv.first % MOD; } } cout << ans << endl; return 0; }