結果
| 問題 |
No.2264 Gear Coloring
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-31 17:50:33 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 161 ms / 2,000 ms |
| コード長 | 1,764 bytes |
| コンパイル時間 | 331 ms |
| コンパイル使用メモリ | 82,708 KB |
| 実行使用メモリ | 71,832 KB |
| 最終ジャッジ日時 | 2025-03-31 17:51:15 |
| 合計ジャッジ時間 | 2,309 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 18 |
ソースコード
MOD = 998244353
def factorize(n):
factors = {}
while n % 2 == 0:
factors[2] = factors.get(2, 0) + 1
n = n // 2
i = 3
while i * i <= n:
while n % i == 0:
factors[i] = factors.get(i, 0) + 1
n = n // i
i += 2
if n > 2:
factors[n] = 1
return factors
def generate_divisors_with_exponents(primes, exponents_l):
divisors = []
n = len(primes)
def backtrack(index, current_exp, current_val):
if index == n:
divisors.append((current_val, current_exp.copy()))
return
p = primes[index]
max_e = exponents_l[index]
for e in range(max_e + 1):
current_exp.append(e)
backtrack(index + 1, current_exp, current_val * (p ** e))
current_exp.pop()
backtrack(0, [], 1)
return divisors
n, m = map(int, input().split())
a = list(map(int, input().split()))
from math import gcd
lcm = 1
for num in a:
g = gcd(lcm, num)
lcm = (lcm * num) // g
if lcm == 0:
print(0)
exit()
factors = factorize(lcm)
primes = sorted(factors.keys())
exponents_l = [factors[p] for p in primes]
divisors = generate_divisors_with_exponents(primes, exponents_l)
total = 0
for d_value, d_exponents in divisors:
sum_g = 0
for num in a:
sum_g += gcd(d_value, num)
term = pow(m, sum_g, MOD)
phi = 1
for i in range(len(primes)):
p = primes[i]
e_in_l = exponents_l[i]
e_in_d = d_exponents[i]
e = e_in_l - e_in_d
if e > 0:
phi_p = ((p - 1) * pow(p, e - 1, MOD)) % MOD
phi = (phi * phi_p) % MOD
total = (total + term * phi) % MOD
inv_l = pow(lcm, MOD - 2, MOD)
ans = (total * inv_l) % MOD
print(ans)
lam6er