Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from decimal import Decimal, getcontext
- getcontext().prec = 500
- # copied from some site
- def bezout(a, b):
- # Apply the Extended Euclidean Algorithm
- u1, v1, r1 = 1, 0, a
- u2, v2, r2 = 0, 1, b
- while r2:
- q = r1 // r2
- u1, u2 = u2, u1-q*u2
- v1, v2 = v2, v1-q*v2
- r1, r2 = r2, r1-q*r2
- assert u1*a + v1*b == r1
- assert u2*a + v2*b == r2
- if r1 < 0:
- u1, v1, r1 = -u1, -v1, -r1
- return (u1, v1, r1)
- def crt(cong1, cong2):
- # Apply the Chinese Remainder Theorem
- a1, n1 = cong1
- a2, n2 = cong2
- c1, c2, g = bezout(n1, n2)
- assert n1*c1 + n2*c2 == g
- if (a1 - a2) % g != 0:
- raise ValueError(f"Incompatible congruences {cong1} and {cong2}.")
- lcm = n1 // g * n2
- rem = (a1*c2*n2 + a2*c1*n1)//g
- return rem % lcm, lcm
- R = 0
- M = 1
- while True:
- try:
- m, r = [int(t) for t in input().split()]
- R, M = crt((r, m), (R, M))
- except EOFError:
- break
- print(Decimal(R).sqrt())
Advertisement
Add Comment
Please, Sign In to add comment