結果
問題 | No.551 夏休みの思い出(2) |
ユーザー |
|
提出日時 | 2020-08-23 13:58:24 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 406 ms / 4,000 ms |
コード長 | 1,596 bytes |
コンパイル時間 | 177 ms |
コンパイル使用メモリ | 12,672 KB |
実行使用メモリ | 11,392 KB |
最終ジャッジ日時 | 2024-10-15 18:11:38 |
合計ジャッジ時間 | 11,599 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 47 |
ソースコード
#!/usr/bin/env python3# †import randomdef mod_inv(a, m):b, s, t = m, 1, 0while b:q = a // ba %= ba, b = b, as -= t * qs, t = t, sif a != 1:return Nonereturn s + m if s < 0 else s# ヤコビ記号 (a/n)def jacobi(a, n):assert 0 < n and n & 1a %= nt = 1while a != 0:while a & 1 == 0:a >>= 1if n & 7 in (3, 5):t = -ta, n = n, aif a & 3 == 3 and n & 3 == 3:t = -ta %= nreturn t * (n == 1)def mod_sqrt(n, p):if jacobi(n, p) == -1:return -1def mul(a, b, c, d, sq):x0 = (a*c + sq*b*d) % px1 = (a*d + b*c) % preturn x0, x1a = 1while jacobi(a*a - n, p) == 1:a = random.randint(1, p-1)m = (p+1) // 2sq = a*a - nr0, r1, x0, x1 = 1, 0, a, 1while m:if m & 1:r0, r1 = mul(r0, r1, x0, x1, sq)x0, x1 = mul(x0, x1, x0, x1, sq)m >>= 1return r0###if __name__ == '__main__':P, _ = map(int, input().split())Q = int(input())def f(a, b, c):D = (b*b - 4*a*c) % Pinv2a = mod_inv(2*a, P)if D == 0:return -b * inv2a % Psq = mod_sqrt(D, P)if sq == -1:return -1x0 = (-b + sq) * inv2a % Px1 = (-b - sq) * inv2a % Preturn ' '.join(map(str, sorted([x0, x1])))for _ in range(Q):a, b, c = map(int, input().split())res = f(a, b, c)print(res)