結果
問題 | No.2119 一般化百五減算 |
ユーザー |
👑 |
提出日時 | 2022-11-04 21:30:04 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 3,005 bytes |
コンパイル時間 | 138 ms |
コンパイル使用メモリ | 82,176 KB |
実行使用メモリ | 86,868 KB |
最終ジャッジ日時 | 2024-07-18 19:13:26 |
合計ジャッジ時間 | 5,166 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 21 WA * 4 |
ソースコード
def modinv(a, MOD):b = MODu = 1v = 0while b:t = a // ba -= t * bu -= t * va, b = b, au, v = v, uu %= MODreturn udef Garner(M, R):m_prod = M[0]C = R[0]for m, r in zip(M[1:], R[1:]):t = (r - C) * modinv(m_prod, m) % mC += t * m_prodm_prod *= mreturn Cfrom math import gcddef isprime(n):if n <= 1:return Falseelif n == 2:return Trueelif n % 2 == 0:return FalseA = [2, 325, 9375, 28178, 450775, 9780504, 1795265022]s = 0d = n - 1while d % 2 == 0:s += 1d >>= 1for a in A:if a % n == 0:return Truex = pow(a, d, n)if x != 1:for t in range(s):if x == n - 1:breakx = x * x % nelse:return Falsereturn Truedef pollard(n):if n % 2 == 0:return 2if isprime(n):return nf = lambda x:(x * x + 1) % nstep = 0while 1:step += 1x = stepy = f(x)while 1:p = gcd(y - x + n, n)if p == 0 or p == n:breakif p != 1:return px = f(x)y = f(f(y))def primefact(n):if n == 1:return []p = pollard(n)if p == n:return [p]left = primefact(p)right = primefact(n // p)left += rightreturn sorted(left)n = int(input())m = int(input())mr = []for _ in range(m):b, c = map(int, input().split())mr.append((b, c % b))mm = {}rr = {}ng = Falsefor m, r in mr:if m == 1:continueprimes = primefact(m)bef = -1x = 1for p in primes:if p != bef:if bef != -1:if bef in mm:r_ = r % xif mm[bef] >= x:if rr[bef] % x != r_:ng = Truebreakelse:if r_ % mm[bef] != rr[bef]:ng = Truebreakmm[bef] = xrr[bef] = r_else:mm[bef] = xrr[bef] = r % xx = pbef = pelse:x *= pif bef in mm:r_ = r % xif mm[bef] >= x:if rr[bef] % x != r_:ng = Trueelse:if r_ % mm[bef] != rr[bef]:ng = Truemm[bef] = xrr[bef] = r_else:mm[bef] = xrr[bef] = r % xif ng:breakif ng:print("NaN")else:M = [1]R = [0]for k in mm:M.append(mm[k])R.append(rr[k])print(Garner(M, R))