結果
| 問題 |
No.368 LCM of K-products
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-05-29 16:14:14 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 164 ms / 2,000 ms |
| コード長 | 1,684 bytes |
| コンパイル時間 | 167 ms |
| コンパイル使用メモリ | 82,332 KB |
| 実行使用メモリ | 76,800 KB |
| 最終ジャッジ日時 | 2024-09-22 14:49:23 |
| 合計ジャッジ時間 | 3,959 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 35 |
ソースコード
import math
def primes2(limit):
''' returns a list of prime numbers upto limit.
source: Rossetta code: Sieve of Eratosthenes
http://rosettacode.org/wiki/Sieve_of_Eratosthenes#Odds-only_version_of_the_array_sieve_above
'''
if limit < 2: return []
if limit < 3: return [2]
lmtbf = (limit - 3) // 2
buf = [True] * (lmtbf + 1)
for i in range((int(limit ** 0.5) - 3) // 2 + 1):
if buf[i]:
p = i + i + 3
s = p * (i + 1) + i
buf[s::p] = [False] * ((lmtbf - s) // p + 1)
return [2] + [i + i + 3 for i, v in enumerate(buf) if v]
def read_data():
N, K = map(int, input().split())
As = list(map(int, input().split()))
return N, K, As
def solve(N, K, As):
mod = 10**9 + 7
max_a = max(As)
primes = primes2(int(max_a**0.5))
ans = 1
for p in primes:
counts = [0] * int(math.log(max_a, p) + 2)
for i, a in enumerate(As[:]):
c = 0
while (not a % p):
a //= p
c += 1
As[i] = a
counts[c] += 1
pows = 0
k = K
for i in range(len(counts) - 1, -1, -1):
ci = counts[i]
if k <= ci:
pows += i * k
break
pows += i * ci
k -= ci
ans = (ans * pow(p, pows, mod)) % mod
As.sort()
prev_a = 1
count = 0
for a in As:
if a != prev_a:
ans = (ans * a) % mod
count = 1
prev_a = a
elif count < K:
ans = (ans * a) % mod
count += 1
return ans
N, K, As = read_data()
print(solve(N, K, As))