結果

問題 No.3022 一元一次式 mod 1000000000
ユーザー Vincent Shaw
提出日時 2025-02-14 21:31:53
言語 Python3
(3.13.1 + numpy 2.2.1 + scipy 1.14.1)
結果
AC  
実行時間 473 ms / 2,000 ms
コード長 1,491 bytes
コンパイル時間 234 ms
コンパイル使用メモリ 12,032 KB
実行使用メモリ 31,660 KB
最終ジャッジ日時 2025-02-17 12:56:14
合計ジャッジ時間 2,857 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 21
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

import sys
import math
def extended_gcd(a, b):
# (g, x, y) g = gcd(a,b) and a*x + b*y = g
if b == 0:
return (a, 1, 0)
else:
g, x1, y1 = extended_gcd(b, a % b)
return (g, y1, x1 - (a // b) * y1)
def modinv(a, m):
# a m
g, x, _ = extended_gcd(a, m)
if g != 1:
# a m
return None
return x % m
def main():
data = sys.stdin.read().strip().split()
if not data:
return
t = int(data[0])
mod = 10**9
ans = []
index = 1
for _ in range(t):
N = int(data[index]); M = int(data[index+1])
index += 2
d = math.gcd(N, mod)
# : d M
if M % d != 0:
ans.append("-1")
continue
# d
a = N // d
m_prime = mod // d
# b' = -M/d b' mod m_prime
b_prime = -M // d
inv_a = modinv(a, m_prime)
# k ≡ b_prime * inv_a (mod m_prime)
k0 = (b_prime * inv_a) % m_prime
# k=0
if k0 == 0:
k0 = m_prime
ans.append(str(k0))
sys.stdout.write("\n".join(ans) + "\n")
if __name__ == '__main__':
main()
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0