結果
| 問題 |
No.1931 Fraction 2
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-15 21:23:23 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,113 bytes |
| コンパイル時間 | 270 ms |
| コンパイル使用メモリ | 81,704 KB |
| 実行使用メモリ | 75,524 KB |
| 最終ジャッジ日時 | 2025-04-15 21:29:26 |
| 合計ジャッジ時間 | 5,751 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 3 WA * 7 TLE * 1 -- * 25 |
ソースコード
import sys
import math
MOD = 998244353
def main():
sys.setrecursionlimit(1 << 25)
N = int(sys.stdin.readline())
A = []
B = []
max_b = 0
for _ in range(N):
a, b = map(int, sys.stdin.readline().split())
A.append(a)
B.append(b)
if b > max_b:
max_b = b
# Precompute smallest prime factors up to max_b
SPF = [0] * (max_b + 1)
for i in range(2, max_b + 1):
if SPF[i] == 0:
SPF[i] = i
for j in range(i*i, max_b+1, i):
if SPF[j] == 0:
SPF[j] = i
# Factorize each B_i and track max exponents
from collections import defaultdict
prime_max = defaultdict(int)
factorizations = []
for b in B:
factors = {}
if b == 1:
factorizations.append(factors)
continue
x = b
while x != 1:
p = SPF[x]
cnt = 0
while x % p == 0:
cnt += 1
x //= p
factors[p] = cnt
if cnt > prime_max[p]:
prime_max[p] = cnt
factorizations.append(factors)
# Compute LCM_mod
LCM_mod = 1
lcm_primes = list(prime_max.keys())
for p in lcm_primes:
exp = prime_max[p]
LCM_mod = LCM_mod * pow(p, exp, MOD) % MOD
# Compute sum_num_mod
sum_num_mod = 0
for i in range(N):
a = A[i]
b_factors = factorizations[i]
m_i_mod = 1
for p in lcm_primes:
exp = prime_max[p]
if p in b_factors:
e_p = b_factors[p]
current_exp = exp - e_p
else:
current_exp = exp
m_i_mod = m_i_mod * pow(p, current_exp, MOD) % MOD
term = a * m_i_mod % MOD
sum_num_mod = (sum_num_mod + term) % MOD
# Compute GCD of sum_num_mod and LCM_mod
g = math.gcd(sum_num_mod, LCM_mod)
# Compute inverse of g modulo MOD
inv_g = pow(g, MOD-2, MOD)
c = sum_num_mod * inv_g % MOD
d = LCM_mod * inv_g % MOD
print(c, d)
if __name__ == '__main__':
main()
lam6er