結果
| 問題 | 
                            No.1931 Fraction 2
                             | 
                    
| コンテスト | |
| ユーザー | 
                             lam6er
                         | 
                    
| 提出日時 | 2025-04-15 21:23:00 | 
| 言語 | PyPy3  (7.3.15)  | 
                    
| 結果 | 
                             
                                WA
                                 
                             
                            
                         | 
                    
| 実行時間 | - | 
| コード長 | 4,008 bytes | 
| コンパイル時間 | 335 ms | 
| コンパイル使用メモリ | 82,164 KB | 
| 実行使用メモリ | 79,928 KB | 
| 最終ジャッジ日時 | 2025-04-15 21:28:50 | 
| 合計ジャッジ時間 | 6,906 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge2 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | WA * 10 TLE * 1 -- * 25 | 
ソースコード
MOD = 998244353
def main():
    import sys
    input = sys.stdin.read().split()
    idx = 0
    N = int(input[idx])
    idx += 1
    A = []
    B = []
    from collections import defaultdict
    max_prime = 2 * 10**5
    spf = list(range(max_prime + 1))
    for i in range(2, int(max_prime**0.5) + 1):
        if spf[i] == i:
            for j in range(i*i, max_prime + 1, i):
                if spf[j] == j:
                    spf[j] = i
    def factorize(x):
        factors = defaultdict(int)
        while x > 1:
            p = spf[x]
            while x % p == 0:
                factors[p] += 1
                x //= p
        return factors
    lcm_factors = defaultdict(int)
    B_factors_list = []
    for _ in range(N):
        a = int(input[idx])
        b = int(input[idx + 1])
        A.append(a)
        B.append(b)
        idx += 2
        factors = factorize(b)
        B_factors_list.append(factors)
        for p, cnt in factors.items():
            if lcm_factors[p] < cnt:
                lcm_factors[p] = cnt
    primes = list(lcm_factors.keys())
    sum_total = 0
    LCM_mod = 1
    for p in primes:
        LCM_mod = LCM_mod * pow(p, lcm_factors[p], MOD) % MOD
    g = 1
    for p in primes:
        e_L = lcm_factors[p]
        e_S = 0
        current_k = e_L
        found = False
        while current_k > 0:
            sum_mod_pk = 0
            for i in range(N):
                a = A[i]
                b_factors = B_factors_list[i]
                if p in b_factors:
                    e_Bi = b_factors[p]
                    exponent_p_Mi = e_L - e_Bi
                    if exponent_p_Mi >= current_k:
                        term = 0
                    else:
                        pk = pow(p, current_k)
                        Mi_part = 1
                        for q in b_factors:
                            if q == p:
                                continue
                            Mi_part = Mi_part * pow(q, lcm_factors[q] - b_factors[q], pk) % pk
                        for q in primes:
                            if q == p or q in b_factors:
                                continue
                            Mi_part = Mi_part * pow(q, lcm_factors[q], pk) % pk
                        Mi_part = Mi_part * pow(p, exponent_p_Mi, pk) % pk
                        term = (a % pk) * Mi_part % pk
                else:
                    exponent_p_Mi = e_L
                    if exponent_p_Mi >= current_k:
                        term = 0
                    else:
                        pk = pow(p, current_k)
                        Mi_part = 1
                        for q in b_factors_list[i]:
                            Mi_part = Mi_part * pow(q, lcm_factors[q] - b_factors_list[i][q], pk) % pk
                        for q in primes:
                            if q == p or q in b_factors_list[i]:
                                continue
                            Mi_part = Mi_part * pow(q, lcm_factors[q], pk) % pk
                        Mi_part = Mi_part * pow(p, exponent_p_Mi, pk) % pk
                        term = (a % pk) * Mi_part % pk
                sum_mod_pk = (sum_mod_pk + term) % pk
            if sum_mod_pk == 0:
                e_S = current_k
                found = True
                break
            current_k -= 1
        if not found:
            e_S = 0
        g *= pow(p, min(e_L, e_S))
    
    g_mod = g % MOD
    if g_mod == 0:
        c_mod = 0
        d_mod = 0
    else:
        sum_mod = 0
        LCM_mod = 1
        for p in primes:
            LCM_mod = LCM_mod * pow(p, lcm_factors[p], g * MOD) % (g * MOD)
        for i in range(N):
            a = A[i]
            b = B[i]
            Mi = (LCM_mod // b) % (g * MOD)
            term = (a % (g * MOD)) * Mi % (g * MOD)
            sum_mod = (sum_mod + term) % (g * MOD)
        c = (sum_mod // g) % MOD
        d = (LCM_mod // g) % MOD
        c_mod = c
        d_mod = d
    print(c_mod, d_mod)
if __name__ == "__main__":
    main()
            
            
            
        
            
lam6er